μ°Έκ³ λμ : λ°μ΄ν° κ³Όνμ μν νμ΄μ¬ νλ‘κ·Έλλ°, μ΅μμ²
κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ λ°°μ°λ μ΄μ
- λ€λ₯Έ μ¬λμ΄ μμ±ν μ½λλ₯Ό μ΄λ»κ² μ¬μ©νλ©΄ μ’μ μ§μ λν λ΅
- λ¨μ΄ λ§λ μ½λλ₯Ό μ¬ μ¬μ©νκ³ μΆμ λ μ¬μ©νλ λνμ μΈ λ°©λ²
- νλμ λ¨μΌ νλ‘κ·Έλ¨μ κ°μ²΄λΌκ³ νλ μ½λλ‘ λ§λ€μ΄ μ¬μ¬μ©ν μ μλλ‘
κ°μ²΄μ ν΄λμ€
- κ°μ²΄ : μ€μνμ μ‘΄μ¬νλ μ€μ μ μΈ λ¬Όκ±΄ λλ κ°λ
- μμ±κ³Ό νλμΌλ‘ ꡬμ±
- ν΄λμ€ : κ°μ²΄κ° κ°μ ΈμΌ ν κΈ°λ³Έ μ 보λ₯Ό λ΄μ μ½λλ‘ μΌμ’ μ μ€κ³λ μ½λ
κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ μ΄λ¬ν κ°μ²΄μ κ°λ μ νμ©νμ¬ νλ‘κ·Έλ¨μ νννλ κΈ°λ²
μμ± → λ³μ, νλ → ν¨μλ‘ μ μλ¨
ex) μΈκ³΅μ§λ₯ μΆκ΅¬ νλ‘κ·Έλ¨
μ΄λ€ μ’ λ₯μ κ°μ²΄κ° νμνμ§
- νλμ νλ‘κ·Έλ¨μμ μ¬λ¬ κ°μ κ°μ²΄κ° μ¬μ©λ μ μμ → κ°μ²΄λ€μ μν μ€κ³λλ₯Ό λ§λ€μ΄μΌ ν¨ (ν΄λμ€ : κ°μ²΄κ° κ°μ ΈμΌ ν κΈ°λ³Έ μ 보λ₯Ό λ΄μ μ½λ, μ€κ³λ μ½λ)
- μΆκ΅¬ μ μλΌλ κ°μ²΄λ₯Ό λ§λ λ€λ©΄ μ μμ μ΄λ¦, ν¬μ§μ , μμν λ±μ κΈ°λ³Έμ μμ±
- μ΄λ¬ν μ 보λ₯Ό ν΄λμ€μ → κ°μ²΄μ μ μ μ΄λ¦μ ν λΉ (μΈμ€ν΄μ€)
μ λ§λ λΆμ΄λΉ΅ν → μλ‘μ΄ μ’ λ₯μ λ€μν λΆμ΄λΉ΅
μ λ§λ ν΄λμ€ μ½λ → λ€μν μ’ λ₯μ μΈμ€ν΄μ€ μμ±
ν΄λμ€ κ΅¬ννκΈ°
π‘ μμ : κΈ°μ‘΄μ λ§λ ν΄λμ€μ νΉμ§μ κ·Έλλ‘ μ΄μ΄λ°μ μ¬μ©νλ κ²
κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ μ₯μ μ€ νλλ μ¬μ¬μ©μ΄κ³ , μ΄λ₯Ό μμ½κ² νλ κ²μ΄ μμ
π‘ ν΄λμ€ μ΄λ¦μ μ μΈν λλ 첫 κΈμμ μ€κ° κΈμκ° λλ¬Έμμ
μμ±μ μ μΈ
νμ΄μ¬ ν΄λμ€μ λνμ μΈ μμ½ ν¨μλ init(), μ΄ μΈμ str**(),** add() λ±μ΄ μ‘΄μ¬
μ΄λ¬ν ν¨μλ€μ μ½μλ ννμ μμ μ μν
class SoccerPlayer(object):
def__init__(self, name, position, back_number)οΌ
self.name = name
self.position = position
self.back_number = back_numbe
- init() : μμ±μ λν μ 보 μ μΈ, ν΄λμ€μμ μ¬μ©ν λ³μλ₯Ό μ μνλ ν¨μ
- init() ν¨μμ 첫 λ²μ§Έ 맀κ°λ³μλ λ°λμ self λ³μλ₯Ό μ¬μ©ν΄μΌ ν¨
- self λ³μλ ν΄λμ€μμ μμ±λ μΈμ€ν΄μ€μ μ κ·Όνλ μμ½μ΄, μμ±λ μΈμ€ν΄μ€λ₯Ό μ§μ νλ λ³μ
- self λ€μ 맀κ°λ³μλ€μ μ€μ λ‘ ν΄λμ€κ° κ°μ§ μμ±self.name = name → ν λΉ μ½λ
- μμ±λ μΈμ€ν΄μ€μ μλ name λ³μμ 맀κ°λ³μλ‘ μ λ ₯λ nameμ΄λΌλ κ°μ ν λΉνλ€λ λ»
- μ΄ κ°λ€μ μ€μ λ‘ μμ±λλ μΈμ€ν΄μ€μ ν λΉλ¨
- ν΄λμ€μ λ³μλ ‘self.λ³μμ΄λ¦’μΌλ‘ init() ν¨μμμ μμ λ‘κ² μμ± κ°λ₯But, init() λ΄μμλ§ μλ‘μ΄ μμ±μ μμ±ν΄μΌλ§ λ€λ₯Έ νλ‘κ·Έλλ¨Έκ° ν΄λμ€λ₯Ό μ¬μ©ν λ ν·κ°λ¦¬μ§ μμ κ²
- νμ΄μ¬μ μΈν°νλ¦¬ν° μΈμ΄μ΄κ³ λμ νμ΄ν μΈμ΄μ΄λ―λ‘, ν΄λμ€ λ΄ λ€λ₯Έ ν¨μμμλ μ΄μ κ°μ μμ±μ μμ±μ΄ κ°λ₯
ν¨μμ μ μΈ
ν¨μλ ν΄λμ€κ° ν μ μλ λ€μν λμμ μ μν μ μμ
class SoccerPlayer(object):
def change_back_number(self, new_number):
print("μ μμ λ±λ²νΈλ₯Ό λ³κ²½νλ€: From %d to %d" % (self.back_number, new_number))
self.back_number = new_number
κΈ°μ‘΄ ν¨μμ κ°μ₯ ν° μ°¨μ΄μ μ selfλ₯Ό 맀κ°λ³μμ λ°λμ λ£μ΄μΌ νλ€λ κ²
selfκ° μμ΄μΌλ§ μ€μ λ‘ μΈμ€ν΄μ€κ° μ¬μ©ν μ μλ ν¨μλ‘ μ μΈλ¨
_(underscore)μ μ°μ
κ°μμ λ°λΌ μ°μμ΄ λλ¨
- 1κ°
μ΄νλ‘ μ°μ΄μ§ μμ λ³μμ νΉλ³ν μ΄λ¦μ λΆμ¬νκ³ μΆμ§ μμ λ
>>> for _ in range(10):
print("Hello, World")
Hello, World
Hello, World
Hello, World
Hello, World
Hello, World
Hello, World
Hello, World
Hello, World
Hello, World
Hello, World
νμλ₯Ό μΈλ _ λ³μλ νΉλ³ν μ©λκ° μμΌλ―λ‘ λ€μμ μ¬μ©λμ§ μμ
_λ₯Ό μμμ λ³μλͺ λμ μ μ¬μ©
2. 2κ°
νΉμν μμ½ ν¨μλ λ³μ
- str() : ν΄λμ€λ‘ μΈμ€ν΄μ€λ₯Ό μμ±νμ λ, κ·Έ μΈμ€ν΄μ€ μ체λ₯Ό print() ν¨μλ‘ νλ©΄μ μΆλ ₯νλ©΄ λμ€λ κ°μ λ»ν¨
- init()
μΈμ€ν΄μ€ μ¬μ©νκΈ°
ν΄λμ€μμ μ€μ μ μΈ λ°μ΄ν°κ° μ λ ₯λμ΄ μ¬μ©ν μ μλ ννμ κ°μ²΄
SoccerPlayerλΌλ ν΄λμ€λ κΈ°λ³Έ μ€κ³λμ΄λ―λ‘ μ μμ μ΄λ¦μ΄λ λ± λ²νΈκ° ν λΉλ κ²μ΄ μλ
- ν΄λμ€ μ΄λ¦ νΈμΆνκ³ , init() ν¨μμ 맀κ°λ³μμ λ§μΆμ΄ κ°μ μ λ ₯ (μ΄κΉκ° μ§μ )
- self λ³μμλ μλ¬΄λ° κ°λ ν λΉνμ§ μμ
- jinhyunμ΄λΌλ μ΄λ¦μ μΈμ€ν΄μ€κ° SoccerPlayerλΌλ ν΄λμ€λ₯Ό κΈ°λ°μΌλ‘ μ μ±
- jinhyunμ΄λΌλ μΈμ€ν΄μ€ μμ²΄κ° SoccerPlayer ν΄λμ€μμ selfμ ν λΉλ¨
# μ 체 SoccerPlayer μ½λ
>>> class SoccerPlayer(object)οΌ
def __init__(self, name, position, back_number)οΌ
self.name = name
self.position =position
self.back_number = back_number
def change_back_number(self, new_number)οΌ
print("μ μμ λ±λ²νΈλ₯Ό λ³κ²½νλ€: From %d to %d" % (self.back_number, new_number))
self.back_number = new_number
def __str__(self)οΌ
return "Hello, My name is %s. I play in %s in center." % (self.name, self.position)
# SoccerPlayerλ₯Ό μ¬μ©νλ instance μ½λ
>>> jinhyun = SoccerPlayer("Jinhyun", "MF", 10)
>>>
>>> print("νμ¬ μ μμ λ±λ²νΈλ:", jinhyun.back_number)
>>> jinhyun.change_back_number(5)
>>> print("νμ¬ μ μμ λ±λ²νΈλ:", jinhyun.back_number)
>>> print(jinhyun) # __str__() ν¨μλ‘ μ μΈλ λΆλΆμ΄ print() ν¨μλ₯Ό μ¬μ©νλ©΄ λ°νλλ ν¨μ
νμ¬ μ μμ λ±λ²νΈλ: 10
μ μμ λ±λ²νΈλ₯Ό λ³κ²½νλ€: From 10 to 5
νμ¬ μ μμ λ±λ²νΈλ: 5
Hello, My name is Jinhyun. I play in MF in center.
μΈμ€ν΄μ€κ° μμ±λ νμλ ν΄λΉ μΈμ€ν΄μ€μ μ΄λ¦μΌλ‘ κ°μ ν λΉνκ±°λ ν¨μλ₯Ό λΆλ₯΄λ©΄ λμ§λ§, ν΄λμ€ λ΄μμλ selfλ‘ νΈμΆλ¨
= μμ±λ μΈμ€ν΄μ€μΈ jinhyunκ³Ό ν΄λμ€ λ΄ selfκ° κ°μ μν
ν΄λμ€λ₯Ό μ¬μ©νλ μ΄μ
- μμ μ μ½λλ₯Ό λ€λ₯Έ μ¬λμ΄ μμ½κ² μ¬μ©ν μ μλλ‘ μ€κ³νκΈ° μν¨
- μ½λκ° λ°μ΄ν° μ μ₯ λΏλ§ μλλΌ λ°μ΄ν°λ₯Ό λ³ννκ±°λ λ°μ΄ν°λ² μ΄μ€μ μ μ₯νλ λ±μ λ€λ₯Έ μν μ ν΄μΌ ν λλ μμ → νλμ κ°μ²΄λ‘ μμ±ν΄ λ€λ₯Έ μ¬λλ€μκ² λ°°ν¬νλ κ²μ΄ ν¨μ¬ μμ μ΄ μ¬μ
- λ¨μν λ°μ΄ν°λ₯Ό μ μ₯νκΈ° μν μλ¨ → μ΄μ°¨μ 리μ€νΈ, Namedtuple ννλ₯Ό μ¬μ©ν΄λ λ¬Έμ μμ
- μ½λλ₯Ό μ’ λ μμ½κ² μ μΈν μ μμ
- μ΄μ°¨μ 리μ€νΈλ‘ μ μΈν μ μλ κ²μ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ κ°λ μ μ μ©ν΄ μ’ λ λͺ ννκ² μ μ₯λ λ°μ΄ν°λ₯Ό νμΈν μ μμ
- λ€λ₯Έ μ¬λλ€μ΄ κ²°κ³Όλ₯Ό μ¬μ©ν λ λ°μ΄ν°κ° 무μμ μν λ°μ΄ν°μΈμ§ λͺ νν μ μ μμ
# λ°μ΄ν°
>>> names = ["Messi", "Ramos", "Ronaldo", "Park", "Buffon"]
>>> positions = ["MF", "DF", "CF", "WF", "GK"]
>>> numbers = [10, 4, 7, 13, 1]
# μ΄μ°¨μ 리μ€νΈ
>>> players = [[name, position, number] for name, position, number in zip(names, positions, numbers)]
>>> print(players)
[['Messi', 'MF', 10], ['Ramos', 'DF', 4], ['Ronaldo', 'CF', 7], ['Park', 'WF', 13], ['Buffon', 'GK', 1]]
>>> print(players[0])
['Messi', 'MF', 10]
# μ 체 SoccerPlayer μ½λ
>>> class SoccerPlayer(object)οΌ
def __init__(self, name, position, back_number)οΌ
self.name = name
self.position = position
self.back_number = back_number
def change_back_number(self, new_number)οΌ
print("μ μμ λ±λ²νΈλ₯Ό λ³κ²½νλ€: From %d to %d" % (self.back_number, new_number))
self.back_number = new_number
def __str__(self)οΌ
return "Hello, My name is %s. I play in %s in center." % (self.name,self.position)
# ν΄λμ€-μΈμ€ν΄μ€
>>> player_objects = [SoccerPlayer(name, position, number) for name, position, number in zip(names, positions, numbers)]
>>> print(player_objects[0])
Hello, My name is Messi. I play in MF in center.
‘κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ° λ§λ₯μ£Όμ’λ₯Ό μ£ΌμνλΌ
λͺ¨λ μ½λμ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ κ°λ μ μ¬μ©ν΄ μ€κ³νκ³ μ νλ μμ¬μ΄ μκΉ
μ°κ³ λ²λ¦¬κ² λλ μ½λλ₯Ό κ°λ°νλ κ²½μ°λ λ§μ
νμ΄μ¬μ‘μ΄λ»κ² νλ©΄ μ½κ² μ½λ©ν μ μμκΉ’μ λν κ³ λ―Ό λμ λμ¨ μΈμ΄
μλ‘μ΄ λ°©λ²μΌλ‘ μ½λ©νλ κ²λ³΄λ€ νμν λ°©λ²μ μ μ¬μ μμ μ μ© μμΌ μμ½κ² λ¬Έμ λ₯Ό ν΄κ²°ν΄μΌ ν¨
κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ κΈ°λ³Έ μ² ν : μ€μνμ λͺ¨λΈλ§
ex) μμ, λ€νμ±, κ°μμ±
μμ
- 무μμΈκ°λ₯Ό λ΄λ €λ°λ κ²
- λΆλͺ¨ ν΄λμ€μ μ μλ μμ±κ³Ό λ©μλλ₯Ό μμ ν΄λμ€κ° λ¬Όλ €λ°μ μ¬μ©νλ κ²
>>> class Person(object):
pass
objectκ° Person ν΄λμ€μ λΆλͺ¨ν΄λμ€
object : νμ΄μ¬μμ μ¬μ©νλ κ°μ₯ κΈ°λ³Έ κ°μ²΄
νμ΄μ¬ μΈμ΄κ° κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ΄λ―λ‘ λͺ¨λ λ³μλ κ°μ²΄μ
>>> a = "abc"
>>> type(a)
<class 'str'>
μ§κΈκΉμ§ λ¬Έμμ΄νμ΄λΌκ³ λΆλ μ§λ§ λ΄λΆμ μΌλ‘λ κ°μ²΄λ‘ μ²λ¦¬λμ΄μμ
νμ΄μ¬μ λͺ¨λ κ°μ²΄λ object κ°μ²΄λ₯Ό μμν¨
>>> class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
>>>
>>> class Korean(Person): # κ°λ¨ν μμλ°κΈ°
pass # λ³λμ λ΄μ© μμ΄ ν΄λμ€λ§ μ‘΄μ¬
>>>
>>> first_korean = Korean("Sungchul", 35)
>>> print(first_korean.name)
Sungchul
Person ν΄λμ€λ₯Ό λ¨Όμ μμ±
Korean ν΄λμ€λ₯Ό λ§λ€λ©΄μ Person ν΄λμ€λ₯Ό μμλ°μ
Korean ν΄λμ€λ λ³λμ μμ±μλ μμ§λ§, Person ν΄λμ€κ° κ°μ§ μμ±μλ₯Ό κ·Έλλ‘ μ¬μ©νμ¬ μΈμ€ν΄μ€λ₯Ό λ§λ¦
- μ¬κ°νμ΄ ν΄λμ€, νμ΄νλ κ° ν΄λμ€μ μμ κ΄κ³
- μμμ νκ² λλ©΄ λΆλͺ¨ ν΄λμ€λ³΄λ€ μμ ν΄λμ€μ μ λ³΄κ° λ ꡬ체ν λ¨
- λΆλͺ¨ κ°μ²΄μλ μΌλ°μ κΈ°λ₯μ, μμ κ°μ²΄μλ μμΈν κΈ°λ₯μ λ£μ΄μΌ ν¨
- λΆλͺ¨ κ°μ²΄λ³΄λ€ μμ κ°μ²΄μ μ’ λ λ§μ μ 보λ₯Ό μ€ (λΆλͺ¨ ν΄λμ€μ λ©μλλ₯Ό μ¬μ μ)
>>> class Person(object): # λΆλͺ¨ ν΄λμ€ Person μ μΈ
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
def about_me(self): # λ©μλ μ μΈ
print("μ μ μ΄λ¦μ", self.name, "μ΄κ³ μ, μ λμ΄λ", str(self.age), "μ΄μ
λλ€.")
>>>
>>>
>>> class Employee(Person): # λΆλͺ¨ ν΄λμ€ PersonμΌλ‘λΆν° μμ
def __init__(self, name, age, gender, salary, hire_date):
super().__init__(name, age, gender) # λΆλͺ¨ κ°μ²΄ μ¬μ©
self.salary = salary
self.hire_date = hire_date # μμ±κ° μΆκ°
def do_sork(self): # μλ‘μ΄ λ©μλ μΆκ°
print("μ΄μ¬ν μΌμ νλ€.")
def about_me(self): # λΆλͺ¨ ν΄λμ€ ν¨μ μ¬μ μ
super().about_me() # λΆλͺ¨ ν΄λμ€ ν¨μ μ¬μ©
print("μ κΈμ¬λ", self.salary, "μμ΄κ³ , μ μ
μ¬μΌμ", self.hire_date, "μ
λλ€.")
Person ν΄λμ€ → λ¨μν μ¬λμ λν μ 보 μ μ
Employee ν΄λμ€ → μΌνλ μκ°κ³Ό μκΈμ λν λ³μ μΆκ° (init()ν¨μ μ¬μ μ)
- μ€λ²λΌμ΄λ© : μμ μ ν¨μ μ΄λ¦κ³Ό νμν 맀κ°λ³μλ κ·Έλλ‘ μ μ§νλ©΄μ ν¨μμ μν μ½λλ₯Ό λ³κ²½νλ κ²
- super().init(맀κ°λ³μ) : λΆλͺ¨ ν΄λμ€μ init() ν¨μλ₯Ό κ·Έλλ‘ μ¬μ©
- κΈ°μ‘΄ ν¨μλ₯Ό κ·Έλλ‘ μ¬μ©νλ €λ©΄ λ³λμ init() ν¨μλ₯Ό λ§λ€μ§ μμλ λ¨
- But, κΈ°μ‘΄ ν¨μλ₯Ό μ¬μ©νλ©΄μ μλ‘μ΄ λ΄μ©μ μΆκ°νκΈ° μν΄μ μ¬μ©
μμ ν΄λμ€μλ§ νμν μλ‘μ΄ ν¨μλ₯Ό μμ±ν μ μμ
λ€μν μμ κΈ°λ₯ μ§μ → ex) λ€μ€μμ : 1κ° μ΄μμ ν΄λμ€ νΉμ§μ μμ
λ€νμ±
- κ°μ μ΄λ¦μ λ©μλκ° λ€λ₯Έ κΈ°λ₯μ νλ κ²
- ex) λΆλͺ¨ ν΄λμ€μ μμ ν΄λμ€κ° μλ‘ λ€λ₯Έ about_me ν¨μ ꡬν
>>> n_crawler = NaverCrawler()
>>> d_crawler = DaumCrawler()
>>> cralwers = [n_crawler, d_crawler]
>>> news = []
>>> for cralwer in cralwersοΌ
news.append (eralwer.do_crawling())
λΆλͺ¨ Crawler ν΄λμ€ → do_crawling ν¨μ μμ±
Crawler ν΄λμ€λ₯Ό μμμμΌ NaverCrawlerμ DaumCrawlerλ₯Ό λ§λ¦
- λ μμ ν΄λμ€λ λͺ¨λ do_crawling ν¨μλ₯Ό κ°κ² λ¨. But, ꡬν λ΄μ©μ λ€λ¦
- κ° ν΄λμ€μμ ꡬνλλ λ΄λΆ λ‘μ§μ μ°¨μ΄κ° μ‘΄μ¬νλλ° μ΄λ₯Ό ν¨μμ λ€νμ±μ΄λΌκ³ ν¨
- μ¬μ©μλ ν¨μμ μ΄λ¦λ§ μλ©΄ κ°μ ννλ‘ μ¬μ© κ°λ₯νμ§λ§, κ°λ°μμ μ μ₯μμλ λ΄λΆμ μΈ κ΅¬νμ κ° ν΄λμ€ λ³λ‘ λ€λ₯΄κ² κ°λ°ν νμκ° μμ
- λ€νμ±μ μ¬μ©νλ©΄ νλ‘κ·Έλ¨μ μμ±ν λ μ¬μ©μκ° μ’ λ μ½κ² ν΄λμ€λ₯Ό μ¬μ© κ°λ₯
>>> class Animal:
def __init__(self, naem):
self.name = name
def talk(self):
raise NotImplementedError("Subclass must implement abstract method")
>>> class Cat(Animal):
def talk(self):
return 'Meow!'
>>> class Dog(Animal):
def talk(self):
return 'Woof! Woof!'
>>> animals = [Cat('Missy'), Cat('Mr.Mistoffelees'), Dog('Lassie')]
>>> for animal in animals:
print(animal.name + ': ' +animal.talk())
Missy: Meow!
Mr.Mistoffelees: Meow!
Lassie: Woof! Woof!
λΆλͺ¨ ν΄λμ€λ Animalμ΄λ©°, Catκ³Ό Dogλ Animal ν΄λμ€λ₯Ό μμλ°μ
ν΅μ¬ ν¨μλ talkμΌλ‘, λ λλ¬Ό ν΄λμ€μ μν μ΄ λ€λ₯Έ κ²μ νμΈν μ μμ
- NotImplementedError : μμ ν΄λμ€μλ§ ν΄λΉ ν¨μλ₯Ό μ¬μ©ν μ μλλ‘
κ°μμ±
- κ°μ²΄μ μ 보λ₯Ό λ³Ό μ μλ λ 벨μ μ‘°μ νμ¬ κ°μ²΄μ μ 보 μ κ·Όμ μ¨κΈ°λ κ²
- μΊ‘μν : κ°μ²΄μ 맀κ°λ³μ μΈν°νμ΄μ€λ§ λͺ νν μλ©΄ μ¬μ© κ°λ₯
- μ 보 μλ : νμν μ 보λ μ¨κ²¨μΌ ν¨
→ μΈλΆμμ μ½κ² μ¬μ© κ°λ₯νκ³ , μ½λμ μΈλΆμ μΈ λ΄μ©μ λͺ¨λ₯΄κ² νλ€λ μΈ‘λ©΄μμ λΉμ·ν μλ―Έλ‘ μ¬μ©λ¨
μΊ‘μνλ₯Ό μ¬μ©ν΄μΌ νλ μ΄μ λ 무μμΌκΉ?
- ν΄λμ€ κ° κ°μ λ° μ 보 곡μ λ₯Ό μ΅μννμ¬ κ°λ³ ν΄λμ€κ° λ¨λ μΌλ‘λ μ λμν μ μλλ‘ ν΄μΌνκΈ° λλ¬Έ
- κ° ν΄λμ€κ° κ°νκ² μ°κ²°λμ΄ μλ€λ©΄ λ 립μ μΌλ‘ μ¬μ©νκΈ° μ΄λ €μ
- μ¬μ©μ μ μ₯μμλ μμΈν λ΄μ©μ λͺ¨λ₯΄λλΌλ μΈν°νμ΄μ€λ₯Ό μ΄ν΄νλ©΄ ν΄λμ€λ₯Ό μ½κ² μ¬μ©ν μ μμ
νμ΄μ¬μμλ μ΄λ¬ν κ°λ μ κ°μμ±μ΄λΌλ μ΄λ¦μΌλ‘ μ μ©μν€κ³ . μ 보 μλμ μ΄λ»κ² ν κ²μΈκ°λ₯Ό μ½λ λ 벨μμ μ‘°μ ν¨
β Product λ₯Ό Inventory κ°μ²΄μ μΆκ°
Inventoryμλ μ€μ§ Product κ°μ²΄λ§ λ€μ΄κ°
Inventoryμ ProductκΈ° λͺ κ°μΈμ§ νμΈμ΄ νμν¨
Inventoryμ Product itemsλ μ§μ μ κ·Όμ΄ λΆκ°ν¨
>>> class Prodcut(object):
pass
>>>
>>> class Inventory(object):
def __init__(self):
self.__items = []
def add_new_item(self, product):
if type(prodcut) == Product:
self.__items.append(prodct)
print("new item added")
else:
raise ValueError("Invalid Item")
def get_number_of_items(self):
return len(self.__items)
>>> my_inventory = Inventory()
>>> my_inventory.add_new_item(Prodcut())
>>> my_inventroy.add_new_item(Product())
>>>
>>> my_inventory.__items
new item added
new item added
Traceback (most recent call last):
File "visibilityl.py", line 20, in <modul>
my_inventory_iterns
AttributeErrorοΌ 'Inventory' object has no attribute '__items'
Inventory κ°μ²΄μ add_new_item() ν¨μλ₯Ό μ¬μ©νμ¬ μλ‘κ² μμ±λ Product κ°μ²΄λ₯Ό λ£μ΄μ€
μλ£νμ λΉκ΅νμ¬ ν΄λΉ κ°μ²΄κ° Product κ°μ²΄μΈμ§ νμΈνκ³ , κ·Έλ μ§ μμ κ²½μ° ValueErrorκ° λ°μ
itemsλ Product κ°μ²΄κ° λ€μ΄κ°λ 곡κ°μΌλ‘, get_number_of_items()λ₯Ό μ¬μ©νμ¬ μ΄ κ°μ²΄μ κ°μλ₯Ό λ°ν
- __items λ³μ : Inventoryλ₯Ό μ μ₯νλ 곡κ°μΌλ‘, add_new_item()μ ν΅ν΄ Product κ°μ²΄λ₯Ό λ£μ μ μμ
- add_new_item()μ΄ μλλΌ μ§μ ν΄λΉ κ°μ²΄μ μ κ·Όν΄ μλ‘μ΄ κ°μ μΆκ°νλ €κ³ νλ€λ©΄ μ€λ₯ λ°μν΄λμ€ λ΄λΆμ©μΌλ‘λ§ λ³μλ₯Ό μ¬μ© → ‘__λ³μλͺ ’
- κ°μμ±μ ν΄λμ€ λ΄λ‘ νμ νλ©΄μ κ°μ΄ λ€λ₯΄κ² λ€μ΄κ°λ κ²μ λ§μ μ μμ(μ 보 μλ)
- _(νΉμ μν μ νλ μμ½ λ¬Έμ)κ° ν΄λμ€μμ λ³μμ λ κ°κ° λΆμ΄μμ΄ μ¬μ©λ ν΄λμ€ λ΄λΆμμλ§ μ κ·Όν μ μκ³ , μΈλΆμλ νΈμΆνμ¬ μ¬μ©νμ§ λͺ»νκΈ° λλ¬Έ
μ΄λ¬ν μ 보λ₯Ό ν΄λμ€ μΈλΆμμ μ¬μ©νκΈ° μν΄μλ?
- @property μ¬μ©
- λ°μ½λ μ΄ν° : ν΄λμ€μ κ° λ©μλ μλ¨μ μ½μ νμ¬ ν΄λΉ λ©μλμ κΈ°λ₯μ μΆκ°νλ νμ΄μ¬ λ¬Έλ²
>>> class Inventory(object):
def __init__(self):
self.__items = [] # privae λ³μλ‘ μ μΈ (νμΈμ΄ μ κ·Ό λͺ» ν¨)
@property # property λ°μ½λ μ΄ν° (μ¨κ²¨μ§ λ³μ λ°ν)
def items(self):
return self.__items
>>> my_inventory = Inventory()
>>> items = my_inventory.items
>>> items.append(Product())
λ€λ₯Έ μ½λλ κ·Έλλ‘ μ μ§νκ³ λ§μ§λ§μ itemsλΌλ μ΄λ¦μΌλ‘ λ©μλλ₯Ό λ§λ€λ©΄μ @property λ₯Ό λ©μλ μλ¨μ μ λ ₯
μΈλΆμμ μ¬μ©ν λ³μμΈ __itemsλ₯Ό λ°ν
** __items λ³μμ μλ μ΄λ¦μ΄ μλ itemsλ‘ νΈμΆ
@propertyλ₯Ό λΆμΈ ν¨μ μ΄λ¦μΌλ‘ μ€μ __itemsλ₯Ό μ¬μ©ν μ μλ κ²μ΄
μ΄λ κΈ°μ‘΄ private λ³μλ₯Ό λꡬλ μ¬μ©ν μ μλ public λ³μλ‘ λ°κΎΈλ λ°©λ² μ€ νλ