1. 객체란?
:데이터(변수,속성)와 코드(함수,메서드)를 포함하는 커스텀 자료 구조이다.
- 객체는 개별 사물을 나타내며 해당 메서드는 다른 사물과 상호작용하는 방법을 정의함.
2. 간단한 객체
1. 클래스 선언하기
- 아무도 만들어본 적이 없는 새 객체를 생성하기 위해서 객체에 포함된 내용을 나타내는 클래스를 정의한다.
- 객체는 플라스틱 박스, 클래스는 상자를 만드는 틀에 비유할 수 있다.
2. 메서드
- 클래스 또는 객체의 함수를 의미한다. (클래스 내에 있는 함수)
3. 초기화
- 객체 생성시 속성 할당하려면 객체 초기화 메서드 __init__()을 사용함.
- __init__()을 정의할 때 첫 번쨰 매개변수는 self여야 한다.
<코드 동작 과정>
(1) Cat 클래스의 정의를 찾는다.
(2) 메모리에 새 객체를 초기화(생성)한다.
(3) 객체의 __init__메서드를 호출하고 새롭게 생성된 객체를 self에 전달하며, 인수('Hello')를 name에 전달한다.
(4) 객체에 name 값을 저장한다.
(5) name값 출력
(6) 새 객체를 반환한다.
(7) furball 변수에 이 객체를 연결한다.
3. 상속
- 기존 클래스에 내용을 추가하거나 수정하면 클래스가 더 복잡해지고 코드가 수행되지 않을 수도 있다.
이 문제는 상속으로 해결할 수 있다.
기존 클래스에서 일부를 추가하거나 변경하여 새 클래스를 생성한다. (코드를 재사용하는 방식)
상속을 이용하면 새로운 클래스는 기존 클래스를 복사하지 않고도 모든 코드들을 자유롭게 사용할 수 있다.
1. 부모 클래스 상속받기
- 기존 클래스의 행동을 오버라이드(재정의)한다.
- 기존 클래스 = 부모 클래스 = 슈퍼 클래스 = 베이스 클래스
- 새 클래스 = 자식 클래스 = 서브 클래스 = 파생된 클래스
give_me_a_yugo 객체는 Yugo 클래스의 인스턴스이고,
Car 클래스가 할 수 있는 것을 상속받는다.
※ 상속은 충분히 매력적이지만 남용될 수 있다.
2. 메서드 오버라이드
- __init__메서드를 포함한 모든 메서드를 오버라이드 할 수 있다.
- __init__메서드를 재정의하였다.
- MDPerson과 JDPerson은 Person의 서브클래스이다.
- 부모 클래스의 Person과 같은 인수를 취하지만, 객체의 인스턴스 내부에서는 다른 name값을 저장한다.
3. 메서드 추가하기
- 자식 클래스도 부모 클래스에 없는 메서드를 추가할 수 있다.
부모 클래스는 자식 클래스의 메서드를 사용할 수 x
4. 부모에게 도움받기 : super()
자식 클래스에서 부모 클래스를 호출하고 싶을 떄 사용한다.
자식 클래스에서 init 함수를 정의하면 더이상 자동으로 부모 클래스의 init함수를 호출하지 않는다.
그래서 부모 클래스를 호출하고 싶다면, super를 사용해야 한다.
<호출 과정>
- super 메서드는 부모 클래스의 정의를 얻는다.
- __init__()메서드는 Person.__init__()메서드를 호출한다.
이 메서드는 self 인수를 슈퍼 클래스로 전달하는 역할을 한다.
Person()에서 받는 인수는 name이다.
★ super().__init__(name) 을 self.name=name으로 쓰면 안 되는 이유?
==> 상속의 이점을 활용할 수 없기 때문이다.
1. super() 메서드를 사용하면 Person 클래스에서 일반 Person 객체와 같은 방식으로 동작하게 만들 수 있다.
2. Person 클래스의 정의가 바뀌면 Person 클래스로부터 상속 받은 EamilPerson 클래스의 속성과 메서드에 변경 사항이 반영됌.
5. 다중 상속
- 객체는 실제로 여러 부모 클래스를 상속받을 수 있다.
- 파이썬의 상속은 메서드 해석 순서에 달려있다.
- 각각의 파이썬 클래스에는 특수 메서드 mro()가 있는데, 해당 클래스 객체에 대한 메서드 또는 속성을 찾는 데 필요한 클래스의 리스트를 반환한다.
참고 출처
: 처음 시작하는 파이썬
'여니의 프로그래밍 study > 파이썬' 카테고리의 다른 글
[#10장 연습문제] 처음 시작하는 파이썬 10장 연습문제 (0) | 2021.01.08 |
---|---|
[#10 파이썬 기초] 객체와 클래스2 (0) | 2021.01.08 |
[#9장 연습 문제] 처음 시작하는 파이썬 9장 풀어보기 (0) | 2021.01.06 |
[#9 파이썬 기초] 함수 정의하기 (2) | 2021.01.06 |
쥬피터 노트북 배경 바꾸기 (0) | 2021.01.06 |