class & self
class(ν΄λμ€)λ, λ°μ΄ν°μ κΈ°λ₯μ΄ ν¨κ» λ¬Άμ¬ μλ νλμ νμ΄λ€. μ΄ νμ μ΄μ©νμ¬ μ¬λ¬ κ°μ object(κ°μ²΄)λ₯Ό λ§λ€ μ μλ€. κ°κ°μ κ°μ²΄λ λ 립μ μ΄μ΄μ μλ‘μκ² μν₯μ μ£Όμ§ μλλ€.
μ΄ν΄νκΈ° μ½κ² μλ₯Ό λ€μ΄ 보μ.
ν΄λμ€λ μ΄μ½λ¦Ώμ λ§λλ νκ³Ό κ°λ€. λ Ήμ μ΄μ½λ¦Ώμ νμ λΆμ΄ μ΄μ½λ¦Ώμ 무νμ μμ°ν μ μλ€. μ΄ νλ‘ λ§λ€μ΄μ§ κ°κ°μ μ΄μ½λ¦Ώμ κ°μ²΄λΌκ³ μκ°νλ©΄ λλ€.
κ°κ°μ μ΄μ½λ¦Ώμ λ 립μ μ΄λ―λ‘ μ΄μ½λ¦Ώμ μ΄λ€ λ°μ½λ μ΄μ μ μ¬λ¦¬λλΌλ λ€λ₯Έ μ΄μ½λ¦Ώμλ μν₯μ μ£Όμ§ μλλ€.
ν΄λμ€λ₯Ό μ΄μ©νλ©΄ κ°μ κΈ°λ₯μ νλ λ 립μ μΈ μ¬λ¬ κ°μ²΄λ₯Ό μμ±ν μ μκΈ° λλ¬Έμ νΈλ¦¬νλ€. μΌκΈ°μ₯ νλ‘κ·Έλ¨μ μμ±ν΄μΌ νλλ°, μ¬λλ§λ€ λ€λ₯Έ μΌκΈ°μ₯μ λ§λ€μ΄μ€ λ μ΄κ±Έ μΌμΌμ΄ μ½λλ‘ μμ±νλ©΄ μκ°λλΉ, κ·Έλ¦¬κ³ μμλλΉ(!)μ΄κΈ° λλ¬Έμ΄λ€.
ν΄λμ€μ κ°μ²΄λ λ€μκ³Ό κ°μ΄ μμ±ν μ μλ€.
class chocoMaker:
pass
a = chocoMaker() # a κ°μ²΄ μμ±
b = chocoMaker() # b κ°μ²΄ μμ±
μμ§ chocoMakerλΌλ ν΄λμ€μ μ무 κ°μ΄λ κΈ°λ₯μ΄ ν¬ν¨λμ΄μμ§ μλ€.
ν΄λμ€μ ν¨μλ₯Ό ν¬ν¨μν€λ λ°©λ²μ λ€μκ³Ό κ°λ€.
class chocoMaker:
def decorate(self, color, type):
self.color = color
self.type = type
a = chocoMaker()
a.decorate('white', 'sprinkle')
ν΄λμ€ λ΄λΆμ ν¨μλ method(λ©μλ)λΌκ³ λΆλ₯Έλ€.
λ©μλμ 첫 λ²μ§Έ 맀κ°λ³μλ λκ° selfλ₯Ό μ΄λ€. selfμ μν μ κ°μ²΄ μκΈ° μμ μ νΈμΆνλ κ²μ΄λ€.
κ°μ²΄λ₯Ό μμ±νκ³ λ©μλλ₯Ό μ¬μ©ν λλ μμ κ°μ΄ κ°μ²΄.λ©μλ(...) μ΄λ° μμΌλ‘ μμ±ν΄μΌ νλ€. κ·Έλ°λ° 첫 λ²μ§Έ 맀κ°λ³μμλ selfλ μ€μ λ‘ μ¬μ©ν λ μ λ ₯νμ§ μμλ λλ€. κ°μ²΄.λ©μλ(...)μμ κ°μ²΄κ° selfλ‘ μλμΌλ‘ μ λ¬λκΈ° λλ¬Έμ΄λ€.
λ§μ½ μ΄ λ°©λ²μ΄ λ§μμ λ€μ§ μλλ€λ©΄ μλμ κ°μ΄ μμ±ν΄λ λλ€.
a = chocoMaker()
chocoMaker.decorate(a, 'white', 'sprinkle')
decorate λ©μλμ μνλ¬Έμ μ΄ν΄λ³΄μ.
a.decorate('white', 'sprinkle')κ³Ό κ°μ΄ μμ±νλ©΄, aλΌλ κ°μ²΄ λ΄λΆμ color, type κ°μ²΄λ³μκ° μμ±λκ³ , 'white', 'sprinkle'κ°μ΄ μ μ₯λλ€.
ν΄λμ€λ‘ λ§λ μ¬λ¬ κ°μ§ κ°μ²΄ κ°μ λ 립μ±μ΄ 보μ₯λλ―λ‘, ν κ°μ²΄μ κ°μ²΄λ³μμ κ°μ μμ νλ€κ³ νμ¬ λ€λ₯Έ κ°μ²΄μ κ°μ²΄λ³μ κ°μ΄ λ¬λΌμ§μ§ μλλ€.
init/μμ±μ
chocoMaker ν΄λμ€μ λ€λ₯Έ λ©μλλ μΆκ°ν΄λ³΄μ.
class chocoMaker:
def decorate(self, color, type):
self.color = color
self.type = type
def plate(self):
res = self.color + self.type
return res
plate λ©μλλ₯Ό μΆκ°νμλ€. μ΄ μν©μμ λ€μκ³Ό κ°μ΄ μ½λλ₯Ό μμ±νλ©΄ μ€λ₯κ° λ°μνλ€.
b = chocoMaker()
b.plate()
μ΄μ λ μμ λ§λ€μ΄λμλ decorate λ©μλλ₯Ό κ±°μΉμ§ μκ³ λ plate λ©μλλ₯Ό μ€νν μ μκΈ° λλ¬Έμ΄λ€.
νμ§λ§ decorate μν ν plateλ₯Ό μννλλ‘ νλ©΄ λΆνΈνλ€. ν λ²μ ν΄κ²°ν μ μλ λ°©λ²μ΄ μμκΉ?
μ°λ¦¬λ μ΄λ΄ λ μμ±μ(constructor)λ₯Ό μ¬μ©νλ€. μμ±μλ κ°μ²΄λ₯Ό μμ±ν λ μλμΌλ‘ νΈμΆλλ λ©μλλ₯Ό μλ―Ένλ€. __init__μΌλ‘ μ¬μ©ν μ μλ€.
λ€μ μ½λλ₯Ό μ΄ν΄λ³΄μ.
class chocoMaker:
def __init__(self, color, type):
self.color = color
self.type = type
def decorate(self, color, type):
self.color = color
self.type = type
def plate(self):
res = self.color + self.type
return res
c = chocoMaker('pink', 'decopen')
cλΌλ κ°μ²΄λ₯Ό λ§λ€ λ, decorateλ₯Ό λΆλ¬μ¬ νμ μμ΄ chocoMakerμ ν¨κ» μνλ κ°μ μ λ¬ν μ μλ€.
μμ
μ½λλ₯Ό μ§λ€ 보면 κ°μ μμ±μ κ°λ μλ‘μ΄ ν΄λμ€λ₯Ό μμ±ν΄μΌ ν νμκ° μλ€.
μλ₯Ό λ€μ΄, μκΉκ³Ό λ°μ½λ μ΄μ μ μ’ λ₯λ§μ κ°λ chocoMaker ν΄λμ€μμ λ°μ½λ μ΄μ μ κ°μλ₯Ό μΆκ°ν ν΄λμ€λ₯Ό μλ‘ λ§λλ κ²½μ°λ₯Ό μκ°ν΄λ³΄μ.
μλ‘μ΄ ν΄λμ€λ₯Ό μμ±νλ κ²λ³΄λ€ κΈ°μ‘΄μ chocoMaker ν΄λμ€λ₯Ό μ΄μ©νμ¬ λ§λλ νΈμ΄ ν¨μ¬ κ°λ¨νλ€. μ΄λ΄ λ μ΄μ©νλ κ²μ΄ super().__init__λ₯Ό μ΄μ©ν μμμ΄λ€.
class superChocoMaker(chocoMaker):
def __init__(self, color, type, num): # num μΆκ°
super().__init__(color, type)
self.num = num
def superPlate(self): # κΈ°μ‘΄ ν΄λμ€μ λ©μλλ₯Ό μμ
super().plate()
ν΄λμ€λ₯Ό μμ±ν λ ν΄λμ€ μ κ΄νΈ μμ μμν ν΄λμ€μ μ΄λ¦μ μ μ΄λ λ€μ, super().__init__μ inputμΌλ‘ μμν κΈ°μ‘΄ ν΄λμ€μ μμμ μ΄λ¦μ μ μ΄μ€λ€.
λλ‘λ μλ‘ λ§λ ν΄λμ€μμ κΈ°μ‘΄μ λ©μλμ κ°μ μ΄λ¦μ μ¬μ©νμ§λ§ λ€λ₯Έ κΈ°λ₯μ νλ λ©μλλ₯Ό λ§λ€κ³ μΆμ μ μλ€. κ·Έλ΄ λμλ κ·Έλ₯ μμλ°μ (μλ‘ λ§λ ) ν΄λμ€ λ΄λΆμμ λ©μλλ₯Ό λ€μ μ μνλ©΄ λλ€.
κΈ°μ‘΄ ν΄λμ€μ λ©μλλ₯Ό μμλ°κ³ μΆμ λλ super().λ©μλμ κ°μ λ°©μμΌλ‘ μμ±νλ€.