-
νμ΄μ¬ κΈ°μ΄ 6. ν΄λμ€μ μμPYTHON 2020. 8. 31. 22:13
π― νμ΄μ¬ ν΄λμ€μ μμμ μμλ³Έλ€.
ν΄λμ€
νλ‘κ·Έλ¨μ΄ 컀μ§λ©΄ μ μ§λ³΄μλ₯Ό μν΄ ν΄λμ€λ‘ μ½λλ₯Ό ꡬ쑰ννκ³ μλ‘κ°μ κ²°ν©μ λμ¨νκ² ν΄μΌνλ€. ν΄λμ€λ₯Ό μ΄ν΄νκΈ° μν΄μ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ μ€λͺ ν κΈμ λ¨Όμ μ°Έκ³ νλ κ² μ’λ€.
ν΄λμ€ μ μΈ
class UserInfo: pass
μ¬μ©μ μ 보(κ°μ²΄)λ₯Ό μ°μ΄λΌ ν° ν(ν΄λμ€)λ₯Ό λ¨Όμ λ§λ λ€. μ΄ ν νλλ§ μμΌλ©΄ μμ£Ό λ€μν μ¬μ©μλ₯Ό μ½κ² μμ±ν μ μλ€.
ν΄λμ€ μ΄λ¦μ 첫 κΈμλ λλ¬Έμλ‘ μ μΈνλ€. μ΄λ€ λ΄μ©λ μμ±νμ§ μκ³ pass ν€μλλ₯Ό μ°λ©΄ μΌλ¨ μλ¬μμ΄ μ½λλ₯Ό μ€νν μ μλ€.
ν΄λμ€ μ΅μ΄ μ΄κΈ°ν
class UserInfo: def __init__(self): print("μ΄κΈ°ν") user1 = UserInfo()
ν΄λμ€λ μμ±κ³Ό λ©μλλ‘ κ΅¬μ±λλ€. μμ±μ κ°μ²΄μ νΉμ§μ, λ©μλλ μνν λμμ λνλΈλ€.
__init__()
λ©μλλ ν΄λμ€λ‘ κ°μ²΄λ₯Ό μ²μ μ°μ΄λΌ λ μ¬μ©λλ€. ν΄λμ€ μ μΈμ νλ§ λ§λ κ²μ΄λ―λ‘ μ΄ νλ‘ κ°μ²΄λ₯Ό μ°μ΄λ΄μΌ λ©λͺ¨λ¦¬μ μ¬λ €μ μ¬μ©ν μ μλ€. νλ‘ κ°μ²΄λ₯Ό μ°μ΄λ΄λ μμ μ μΈμ€ν΄μ€ν νλ€κ³ νννλλ°, μ΄λ€ λ³μμ μ΄ ν΄λμ€λ₯Ό ν λΉν΄μ λ©λͺ¨λ¦¬μ μμ±νλ μμ μ΄λ€. ν΄λμ€λ‘ μ½λ©νκ³ λ³μμ ν λΉμμΌμ μΈμ€ν΄μ€ννλ€.μλ°μ λ¬λ¦¬ νμ΄μ¬μ λ©μλμ 첫λ²μ§Έ 맀κ°λ³μμ selfλ₯Ό λͺ μνλ€. κ°μ²΄λ₯Ό νΈμΆν λ νΈμΆν κ°μ²΄ μμ μ΄ μ λ¬λκΈ° λλ¬Έμ΄λ€. νΈμΆν λ selfλ₯Ό μλ΅νλ€.
class UserInfo: def __init__(self, name): self.name = name def user_info_p(self) print("name : ", self.name) user1 = UserInfo("Kim") user1.user_info_p()
initλ©μλ μΈμμ nameμ΄λΌλ μ μ μ μμ±μ λ£μ΄λ³Έλ€. selfλΌλ μ μ μΈν¬μ μΈμ€ν΄μ€ λ³μ μμ nameμμ±μ nameμ λ£μ΄μ€λ€.
μ΄μ UserInfo ν΄λμ€λ μΈμ€ν΄μ€ν λ λλ§λ€ μ΄λ¦μ μΈμλ‘ λ°μμΌνλ€. user1μ κ°μ²΄μμ±ν λ Kimμ λ£κ³ user1 κ°μ²΄μ λ©μλμΈ user_info_p()λ₯Ό νΈμΆνλ©΄ user_info_p()ν¨μ μ€νν΄μ μ μ₯λ λ€μμ μΆλ ₯νκ²λλ€.
λ€μμ€νμ΄μ€
μΈμ€ν΄μ€κ° κ°κ³ μλ μκΈ°μμ μ μ μ₯곡κ°.
print(id(user1)) print(id(user2))
id()
λ©μλλ₯Ό μ¬μ©ν΄ κ°μ ν΄λμ€λ‘ μ°μ΄λΈ μλ‘ λ€λ₯Έ κ°μ²΄μ μ£Όμλ₯Ό μ°μ΄λ³΄λ©΄ μμ λ€λ₯Έ κ°μ΄ λμ¨λ€. λͺ¨λ μΈμ€ν΄μ€λ κ°μ λ 립μ μΈ λ€μμ€νμ΄μ€λ₯Ό κ°κ³ μλ€.selfμ μ΄ν΄
class SelfTest: def function1(): print("function1 called!") def function2(self): print(id(self)) print("function2 called!")
f = SelfTest() # f.function1() f.function2() SelfTest.function1()
function1()
μ self μΈμκ° μλ€. λꡬμ ν¨μμΈμ§ λͺ¨λ₯΄λ μνλ€. κ·Έλμ μΈμ€ν΄μ€λ₯Ό ν΅ν΄ νΈμΆν μ μκ³ ν΄λμ€μμ νΈμΆν΄μΌνλ€.function2()
λ©μλλ μκΈ°μμ μ κ°λ¦¬ν€λ self μΈμλ₯Ό κ°μ‘κΈ° λλ¬Έμ κ°μ²΄μμ± ν λ³μλ₯Ό ν΅ν΄ μκΈ°μμ μ λ©μλμ μ κ·Όν μ μλ€.ν΄λμ€λ³μλ κ°μ²΄λ³΄λ€ λ¨Όμ μμ±λκ³ μ¬λ¬ μΈμ€ν΄μ€μμ 곡ν΅μΌλ‘ 곡μ νκ² λλ©° ν΄λμ€μμ μ§μ νΈμΆν μ μλ€. μΈμ€ν΄μ€ ν¨μλ ν΄λμ€λ₯Ό μ§μ μ¬μ©ν μ μμ§λ§ κ°μ²΄μμ±ν λ μΈμλ‘ ν΄λμ€μ΄λ¦μ λ£μ΄μ€μΌνλ€.
class Warehouse: # ν΄λμ€ λ³μ stock_num = 0 def __init__(self, name): # μΈμ€ν΄μ€ λ³μ self.name = name Warehouse.stock_num += 1 def __del__(self): Warehouse.stock_num -= 1
ν΄λμ€ λ³μ
stock_num = 0
μ μ μΈνκ³ κ°μ μ΄κΈ°ννλ€.__del__()
μ μΈμ€ν΄μ€κ° μ’ λ£λ λ νΈμΆλλ ν¨μμ΄λ€.user1 = Warehouse('Kim') user2 = Warehouse('Park')
2λͺ μ κ°μ²΄λ₯Ό μμ±νλ€.
print(user1.name) print(user2.name) print(user1.__dict__) print(user2.__dict__) print(Warehouse.__dict__)
__dict__()
λ©μλλ‘ λ€μμ€νμ΄μ€λ₯Ό νμΈν΄λ³΄λ©΄ κ°κ° μ΄λ¦λ§ μΆλ ₯λλ€. ν΄λμ€λͺ μΌλ‘ λ€μμ€νμ΄μ€λ₯Ό μ°μ΄λ³΄λ©΄ ν΄λμ€ λ³μstock_num=2
λ μΆλ ₯λλ€. 2κ°μ μΈμ€ν΄μ€κ° ν΄λμ€λ³μλ₯Ό 곡μ νκ³ μλ€λ κ±Έ μ μ μλ€.print(user1.stock_num) print(user2.stock_num)
μΈμ€ν΄μ€μ λ€μμ€νμ΄μ€μλ μ ν΄λμ€ λ³μκ° μΆλ ₯λμ§ μμλ€. νμ§λ§ μΈμ€ν΄μ€μμ ν΄λμ€ λ³μλ₯Ό μ°μ΄λ³΄λ©΄ κ°μ΄ μΆλ ₯λλ€. ν΄λμ€λ³μλ λͺ¨λ μΈμ€ν΄μ€μμ 곡μ λλ λ³μμ΄κΈ° λλ¬Έμ΄λ€. μκΈ° λ€μμ€νμ΄μ€μ μμΌλ©΄ ν΄λμ€ λ€μμ€νμ΄μ€μμ μ°Ύλλ€. κ±°κΈ°μλ μμΌλ©΄ μλ¬κ° λ°μνλ€.
λμ€μ λ°°μ°κ² μ§λ§
del user1
μ μ¬μ©νλ©΄ μΈμ€ν΄μ€λ₯Ό λ©λͺ¨λ¦¬μμ μ§μΈ μ μλ€. user1 μΈμ€ν΄μ€λ₯Ό νλ μ§μ°κ³print(user2.stock_num)
μΆλ ₯ν΄λ³΄λ©΄ μ«μκ° 1λ‘ μ€μ΄λ κ±Έ λ³Όμμλ€. μ§μ μ λdef __del__(self)
ν¨μκ° μ€νλμ΄μstock_num
μ νλ κ°μνκΈ° λλ¬Έμ΄λ€.κ°μ²΄μ μΈμ€ν΄μ€μ μ°¨μ΄ (μ ν ν¬ νμ΄μ¬)
ν΄λμ€λ‘ λ§λ κ°μ²΄λ₯Ό μΈμ€ν΄μ€λΌκ³ λ νλ€. a = Cookie() μμ aλ κ°μ²΄. aκ°μ²΄λ Cookie() ν΄λμ€μ μΈμ€ν΄μ€μ΄λ€. μΈμ€ν΄μ€λ νΉμ κ°μ²΄κ° μ΄λ€ ν΄λμ€μ κ°μ²΄μΈμ§ κ΄κ³ μμ£Όλ‘ μ€λͺ ν λ μ¬μ©νλ€. `aλ μΈμ€ν΄μ€λ€` 보λ€λ `aλ κ°μ²΄λ€` λΌλ ννμ΄ μ΄μΈλ¦¬λ©° `aλ μΏ ν€μ κ°μ²΄` 보λ€λ `aλ μΏ ν€μ μΈμ€ν΄μ€`λΌλ ννμ΄ μ΄μΈλ¦°λ€.
μμ
νμ΄μ¬μ μλ°μ λ€λ₯΄κ² λ€μ€μμμ νμ©νλ€. μμμ μ¬μ©νλ©΄ μ½λλ₯Ό μ¬μ¬μ©ν μ μλ€. λΆλͺ¨ν΄λμ€μμ κ³΅ν΅ μμ±μ μ μνκ³ μμλ°λ μλΈν΄λμ€μμ κ·Έκ±Έ μ¬μ©νλ€.
class Car: """Parent Class""" #λ³΄ν΅ μ΄λ κ² νμν΄μ€λ€ def __init__(self, tp, color): self.tp = tp self.color = color def show(self): return 'car class show method' class BmwCar(Car):
μλΈν΄λμ€μ μΈμμ λΆλͺ¨ν΄λμ€λ₯Ό λ£μ΄μ£Όλ©΄ μμνμκ° λκ³ μ¬μ©κ°λ₯ν΄μ§λ€.
class BmwCar(Car): """sub Class""" def __init__(self, car_name, tp, color): super().__init__(tp, color) self.car_name = car_name def show_model(self) -> None: return "Your car name: %s" % self.car_name
λΆλͺ¨μμ μμλ°μ λ©μλλ super()λ‘ μ΄κΈ°ννκ³ μμ μ λ©μλλ selfλ‘ μ΄κΈ°νλ₯Ό νλ€.
-> None
μ 리ν΄ν κ² μλ€λ λ»μ΄λ€.model1 = BmwCar('520d', 'sedan', 'red') print(model1.color) #super print(model1.tp) #super print(model1.car_name) #sub print(model1.show()) #super print(model1.show_model()) #sub print(model1.__dict__)
μΈμ€ν΄μ€ μμ±νκ³ λ©μλ μ¬μ©ν΄λ³΄κΈ°
μ€λ²λΌμ΄λ©
#λ²€μΈ μ λ©μλ μΆκ° def show(self): return 'Car Info : %s %s %s' % (self.car_name, self.tp, self.color) # Method Overriding model2 = BenzCar("220d", "suv", "black") print(model2.show())
λΆλͺ¨μ λͺ¨λ λ©μλλ₯Ό μ¬μ©νλκ² μλλΌ μμλ°μ 건 λ°κ³ λ΄μ©μ μ¬μ μν΄μ μ¬μ©νλ€.
def show(self): print(super().show()) return 'Car Info : %s %s %s' % (self.car_name, self.tp, self.color) # Parent Method Call model3 = BenzCar("350s", 'sedan', 'silver') print(model3.show())
λΆλͺ¨μ show λ©μλλ₯Ό μΆλ ₯νκ³ μΆμ λ, super ν€μλλ‘ μ κ·Όνλ©΄ λλ€.
# Inheritance Info print(BmwCar.mro()) >>> [<class '__main__.BmwCar'>, <class '__main__.Car'>, <class 'object'>]
mro() λ©μλλ μμκ΄κ³λ₯Ό 리μ€νΈ ννλ‘ λ³΄μ¬μ€λ€. λͺ¨λ ν΄λμ€λ μ€λΈμ νΈ ν΄λμ€λ₯Ό μμλ°λλ€.
λ€μ€μμ
class X(): pass class Y(): pass class Z(): pass class A(X,Y): pass class B(Y,Z): pass class M(B, A, Z): pass print(M.mro())
ν΄λμ€ Mμ μμ μλ λͺ¨λ ν΄λμ€λ₯Ό μμλ°μ κ±°λΌ λ€μ€μμλ μνμ΄λ€.
[<class '__main__.M'>, <class '__main__.B'>, <class '__main__.A'>, <class '__main__.X'>, <class '__main__.Y'>, <class '__main__.Z'>, <class 'object'>]
Mμ μμκ΄κ³λ μ΄λ¬νλ€. νμ§λ§ λ무 볡μ‘νκ³ κΉμ κ΄κ³λ μ’μ§ μλ€.
π NEXT : νμ΄μ¬ λͺ¨λκ³Ό ν¨ν€μ§ 곡λΆνκΈ°
λ°μν'PYTHON' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
νμ΄μ¬ κΈ°μ΄ 5. ν¨μμ λλ€μ (0) 2020.08.30 νμ΄μ¬ κΈ°μ΄ 4. 쑰건문과 λ°λ³΅λ¬Έ (0) 2020.08.29 νμ΄μ¬ κΈ°μ΄ 3. 리μ€νΈ, νν, λμ λ리, μ§ν© μλ£ν (0) 2020.08.27 νμ΄μ¬ κΈ°μ΄ 2. μ«μνκ³Ό λ¬Έμν λ°μ΄ν°νμ (0) 2020.08.26 νμ΄μ¬ κΈ°μ΄ 1. λ¬Έμμ΄ μΆλ ₯κ³Ό μ΅μ μ¬μ© (0) 2020.08.24