본문 바로가기

Coding, Testing, Challenge/Python-Middle

Python 클래스 생성자와 상속

728x90

 

이번 포스팅에서는 Python의 생성자에 대해서 알아보도록 하겠습니다.

클래스와 객체에 대한 설명은 기존에 포스팅 하였던 Python 클래스와 객체를 확인해 주세요

2022.06.21 - [Coding, Testing, Challenge/Python-Middle] - Python 클래스와 객체

 

먼저 클래스의 생성자란 클래스로 인스턴스를 만들때 가장 먼저 반드시 호출되는 메서드입니다.

아래의 코드에서 wapple이라는 클래스를 정의한 후 속성인 menu, cream, toping을 선언한 __init__ 가 바로 생성자 입니다.

# 클래스 선언
class wapple:
    def __init__(self, menu, cream, toping):
        self.menu = menu
        self.cream = cream
        self.toping = toping
        print(f'{menu}은 크림은 {cream}, 토핑은 {toping}')
    
    def check_toping(self):
        print(f'{self.menu}은 토핑이 {self.toping}')
    
# 클래스 생성
plain = wapple("플레인와플", "생크림", "없습니다.")
choco = wapple("초코와플", "초코크림", "초코칩")

# 토핑 확인
plain.check_toping()
choco.check_toping()

 

생성자는 다음과 같이 클래스가 생성될때 실행되며, 괄호() 내부에 들어가는 값은 클래스를 생성자 (__init__)의 매개변수 입니다.

# 클래스 생성
plain = wapple("플레인와플", "생크림", "없습니다.")
choco = wapple("초코와플", "초코크림", "초코칩")

 

여기서 보면 실제로 wapple의 __init__에서는 self를 포함한 총 4개의 매개변수가 필요하지만,

실제 실행시에는 3개의 매개변수만 보이고 있습니다.

이는 선언시 자기 자신의 인스턴스를 나타내는   매개변수로 할당된 'self' 때문입니다.

 

 

 

존에 존재하는 클래스의 속성과 메서드를 이어받아서 새로운 클래스를 선언하는 것을 클래스의 상속이라고 합니다.

이떄 속성과 메서드를 전달하는 기존의 클래스를 부모 클래스라고 하며, 

신규로 생성되는 클래스를 자식 클래스라고 합니다.

 

다음은 부모클래스인 Wapple을 이용해서 자식클래스인 Crople을 만드는 코드입니다.

# 부모 클래스 선언
class wapple:
    def __init__(self, menu, cream, toping):
        self.menu = menu
        self.cream = cream
        self.toping = toping
        print(f'{menu}은 크림은 {cream}, 토핑은 {toping}')
    
    def check_toping(self):
        print(f'{self.menu}은 토핑이 {self.toping}')
    
# 클래스 생성
plain = wapple("플레인와플", "생크림", "없습니다.")
choco = wapple("초코와플", "초코크림", "초코칩")

# 토핑 확인
plain.check_toping()
choco.check_toping()

# 자식 클래스 선언
class Crople(wapple):
    pass

# 자식클래스 생성
plain_crople = Crople("플레인크로플", "생크림", "없습니다.")

# 토핑 확인
plain_crople.check_toping()

Crople을 선언할떄 아무런 생성자, 속성, 메서드를 선언하지 않았지만, 

Wapple에서 선언되었던 toping 메서드를 바로 사용한 것을 확인 할 수 있습니다.

 

클래스를 상속받아 선언할떄는 위의 Crople 처럼

class 클래스명( 부모클래스): 

의 형태로 선언합니다.

 

추가로 Crople 선언에 사용된 pass는 코드의 특정 부분을 선언하고 상세 동작을 정의하고 싶지 않을떄 사용하는

문법입니다.

 

이번 포스팅에서는 클래스의 생성자와 상속에 대해서 알아보았습니다.

다음 포스팅에서는 클래스의 오버라이딩에 대해서 알아보도록 하겠습니다.