상속(inheritance)
- 기존에 사용중인 클래스의 필드 중 새롭게 만들 클래스에서 필요한 것들이 있다면 상속을 받아서 그대로 사용한다.
- 여러 클래스를 선언할 때 중복되는 기능들이 존재한다면 공통 기능들을 담아놓을 클래스를 선언한다.
class A:
def __init__(self, data = 10):
self.data = data
def printData(self):
print(self.data)
def show(self):
print("부모 메소드")
class B:
def __init__(self, data, data2):
A.__init__(self, data) // 또는 super().__init__(data)
self.data2 = data2
def printData2(self):
print(self.data, self.data2)
b = B(30, 20)
b.printData2()
예제
class Car:
def __init__(self, brand, color, price):
self.brand = brand
self.color = color
self.price = price
def engineStart(self):
print(self.brand + "열쇠로 시동 킴")
def engineStop(self):
print(self.brand + "열쇠로 시동 끔")
class SuperCar(Car):
def __init__(self, brand, color, price, mode):
super().__init__(brand, color, price)
self.mode = mode
#Overriding //부모 것을 재정의했다는 것을 의미
def engineStart(self):
print(self.brand+"음성으로 시동 킴")
def openRoof(self):
print("지붕 열림")
def closeRoof(self):
print("지붕 닫힘")
ferrari = SuperCar("ferrari", "red", 35000, "daily")
ferrari.engineStart()
ferrari.engineStop()
ferrari.openRoof()
ferrari.closeRoof()
###출력 값
ferrari음성으로 시동 킴
ferrari열쇠로 시동 끔
지붕 열림
지붕 닫힘
class A:
seq = 0
def __init__(self):
A.seq += 1
self.num = A.seq
def test(self):
self.seq = 10
obj1 = A()
obj1.test()
print(obj1.num) // 출력값 1
print(obj1.seq) // 출력값 10
// 전역변수 seq를 쓰고 싶다면 클래스를 호출해서 A.seq를 부르고
// 필드 내의 seq를 쓰고 싶다면 self로 호출해서 부른다