본문 바로가기

Python

[Python] 클래스 상속 / 오버라이딩 / 클래스 변수

자식 클래스가 부모 클래스를 상속받아 부모의 기능을 활용할 수 있다.

받은 기능을 같은 메서드 명으로 재정의할 수 있다 (Override)

class 자식클래스명 (부모클래스명):
class Cal:
  
 class Cal:
  
    def __init__(self, b, c) -> None:
        print('Cal constructor')
        self.b = b;
        self.c = c;
  
    variable1 = 'static'
  
    def setDataFunc(self, b, c: int) -> None:
        self.b = b
        self.c = c
    
    def printFunc(self):
        print(self.b)
        print(self.c)
        
    def printFunc1(self):
        print('Cal 입니다 - ', end='')
        print(self.b)
        print('Cal 입니다 - ', end='')
        print(self.c)

class SubCal(Cal):
    
    def __init__(self, b, c) -> None:
        super().__init__(b, c)
        print('SubCal constructor')
    
    def printFunc1(self):
    	# 부모 메서드 호출
        super().printFunc1()
        print('SubCal 입니다 - ', end='')
        print(self.b)
        print('SubCal 입니다 - ', end='')
        print(self.c)
        print(self.variable1)
    
b = SubCal(42,12)

b.printFunc()
b.printFunc1()

--->
Cal constructor
SubCal constructor
42
12
SubCal 입니다 - 42
SubCal 입니다 - 12
static

* 자식 클래스 객체가 생성되면 부모 클래스 객체가 같이 생성

* 자식 클래스 생성자를 구현하지 않으면, 자동으로 부모 클래스 생성자가 호출되지만, 자식 클래스 생성자를 구현하면 부모 클래스 생성자도 명시적으로 호출 필요.

* super().method 를 이용해서 부모 클래스의 method 호출 가능

 

 

- 클래스 변수

객체끼리 서로 공유하는 static 한 변수

객체 변수는 self.변수명을 통해 변수 사용을 하는 반면, 클래스 변수는 클래스명.변수명 을 통해 사용

클래스 변수가 생성된 이후에 self.변수명을 통해 객체 변수를 생성하면 자신의 객체 변수를 바라보게 됨

class Cal:
  
    #클래스 변수
    variable1 = 'static'
  
    def setDataFunc(self, variable1) -> None:
        self.variable1 = variable1
        
    def printVariable(self):
        print(self.variable1)

class SubCal(Cal):
    pass

h = Cal()
i = Cal()    
l = SubCal()
m = SubCal()

Cal.variable1 = 'shared'
m.setDataFunc('hh')

h.printVariable()
i.printVariable()
l.printVariable()
m.printVariable()

Cal.variable1 = 'shared2'
h.printVariable()
i.printVariable()
l.printVariable()
m.printVariable()

---->
shared
shared
shared
hh
shared2
shared2
shared2
hh
반응형