# 부모클래스
class Calculator():
def __init__(self, first, second):
self.first = first
self.second = second
def add(self):
result = self.first + self.second
return result
def subtract(self):
result = self.first - self.second
return result
def multiply(self):
result = self.first * self.second
return result
def divide(self):
result = self.first / self.second
return result
# 자식클래스 Perfectcal
class Perfectcal(Calculator):
def modulo(self):
result = self.first % self.second
return result
b = Perfectcal(6,3)
print(b.modulo()) # 6 / 3 = 2, 나머지 0 -> 0
생성자(init)를 자식클래스에 따로 작성하지 않아도 파이썬 내부적으로 부모클래스의 생성자를 불러온다.
자식 클래스에서 생성자에 따로 하는 작업이 있을 경우 super()를 통해 부모클래스의 생성자를 불러올 수 있다.super()init( )
def init( ):
메소드 오버라이딩 (Method Overriding)
부모클래스의 메소드를 가져와 수정하고 덮어쓴다.
class Calculator():
def __init__(self, first, second):
self.first = first
self.second = second
def add(self):
result = self.first + self.second
return result
def subtract(self):
result = self.first - self.second
return result
def multiply(self):
result = self.first * self.second
return result
def divide(self):
result = self.first / self.second
return result
class Perfectcal(Calculator):
def modulo(self):
result = self.first % self.second
return result
def divide(self): # divide method override
result = self.first // self.second
return result
a = Calculator(13,3)
b = Perfectcal(13,3)
print(a.divide()) # 4.333333333333333
print(b.divide()) # 4
클래스 변수
객체 변수는 독립적으로 값을 유지하고 다른 객체의 영향을 받지 않는다.
반면에 클래스 변수는 클래스로 만든 모든 객체에 공유된다.
객체들이 클래스 변수를 공유한다.
class Food:
favorite = "치킨"
a = Food()
b = Food()
print(a.favorite, b.favorite) # 치킨 치킨
# 값 바꾸기
Food.favorite = "피자"
print(a.favorite, b.favorite) # 피자 피자
c = Food()
d = Food()
print(c.favorite, d.favorite) # 피자 피자
# 메모리값 = 1988956230256
print(id(a.favorite))
print(id(b.favorite))
print(id(c.favorite))
print(id(d.favorite))