여니의 프로그래밍 study/파이썬

[#10 파이썬 기초] 객체와 클래스1

여니's 2021. 1. 8. 12:42

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()가 있는데, 해당 클래스 객체에 대한 메서드 또는 속성을 찾는 데 필요한 클래스의 리스트를 반환한다.

 

mro() 메서드 = 순서 반환

 

 

참고 출처

: 처음 시작하는 파이썬