λ°μ΄ν° κ³Όνμ μν νμ΄μ¬ νλ‘κ·Έλλ° κ΅μ¬λ₯Ό μ¬μ©νμ¬ μμ±ν κ°μμλ£μ λλ€.
- (κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°Object Oriented Programming, OOP)μ κ°λ μ λ°°μ°κΈ° μ μ μ΄λ¬ν κ°λ μ μ μ¬μ©νλμ§μ λν κ³ λ―Όμ΄ νμνλ€. μ΄κ²μ μμμ ν¨μλ₯Ό λ°°μΈ λμ²λΌ μ¬λ¬ μ¬λμ΄ νλ‘κ·Έλ¨μ κ°λ°ν λ μ΄λ€ λ°©λ²μ΄ μ’μμ§μ λν κ³ λ―Όκ³Ό κ°λ€. μ‘°κΈ λ λκ² μκ°νλ©΄
π‘ λ€λ₯Έ μ¬λμ΄ μμ±ν μ½λλ₯Ό μ΄λ»κ² μ¬μ©νλ©΄ μ’μμ§μ λν λ΅μ΄ λ°λ‘ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ΄λ€.
- κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ λ΄κ° μλλΌ λ¨μ΄ λ§λ μ½λλ₯Ό μ¬μ¬μ©νκ³ μΆμ λ μ¬μ©νλ λνμ μΈ λ°©λ²μ΄ λ€. ν¨μμ²λΌ μ΄λ€ κΈ°λ₯μ ν¨μ μ½λλ‘ λ¬Άμ΄ λλ κ²μ΄ μλλΌ, μ΄λ€ κΈ°λ₯μ μννλ νλμ λ¨μΌ νλ‘κ·Έλ¨μ κ°μ²΄λΌκ³ νλ μ½λλ‘ λ§λ€μ΄ λ€λ₯Έ νλ‘κ·Έλλ¨Έκ° μ¬μ¬μ©ν μ μλλ‘ νλ€. μ΄κ²μ μ»΄ν¨ν°κ³΅νμ μ€λλ νλ‘κ·Έλλ° κΈ°λ² μ€ νλμ΄λ€.
- κ°μ²΄μ ν΄λμ€
- κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ μ΄ν΄νκΈ° μν΄μλ κ°μ²΄(object)μ ν΄λμ€(class)μ κ°λ μ μμμΌ νλ€.
- κ°μ²΄λ μ€μνμ μ‘΄μ¬νλ μ€μ μ μΈ λ¬Όκ±΄ λλ κ°λ μ λ»νλ©°, μμ± (attribute)κ³Ό νλ(action)μΌλ‘ ꡬμ±λλ€. κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ μ΄λ¬ν κ°μ²΄μ κ°λ μ νμ©νμ¬ νλ‘κ·Έλ¨μΌλ‘ νννλ κΈ°λ²μ΄λ€. μμ±μ λ³μ(variable)λ‘, νλμ ν¨μ(function)λ‘ μ μλλ€.
- μλ₯Ό λ€μ΄. μΈκ³΅μ§λ₯ μΆκ΅¬ νλ‘κ·Έλ¨μ λ§λ λ€κ³ κ°μ νμ. μ΄ νλ‘κ·Έλ¨μ λ§λ€κΈ° μν΄μλ μ΄ λ€ μ’ λ₯μ κ°μ²΄κ° νμνμ§ μκ°ν΄μΌ νλ€. κ°λ¨νκ² EAμ€ν¬μΈ μ FIFA μ리μ¦μ κ°μ κ²μμ μκ°ν΄λ³΄μ. μ΄ κ²μμ ꡬμ±νλ λ¨μλ‘ μ¬ν, μ μ, νμ΄ μμΌλ©°, μ΄λ¬ν κ°λ μ κ°μ²΄λΌκ³ ν μ μλ€. ‘μ μ’ λΌλ κ°μ²΄μ κ²½μ° μ μ, μ΄λ¦. ν¬μ§μ , μμν λ±μ΄ νλμ μμ±μ΄λΌκ³ ν μ μκ³ , ‘곡μ μ°¨λ€’, ‘ν¨μ€νλ€’μ κ°μ κ°λ μ νλμΌλ‘ μκ°ν μ μλ€.
κ°μ²΄ (object) μ€μνμ μ‘΄μ¬νλ μ€μ μ μΈ λ¬Όκ±΄ λλ κ°λ μ¬ν, μ μ, ν μμ± (attribute) κ°μ²΄κ° κ°μ§κ³ μλ λ³μ μ μμ μ΄λ¦, ν¬μ§μ . μμν νλ (action) κ°μ²΄κ° μ€μ λ‘ μλμν€λ ν¨μ, λ©μλ 곡μ μ°¨λ€, ν¨μ€νλ€ - μ¬μ€ κ°μ²΄λ νλμ νλ‘κ·Έλ¨μμ μ¬λ¬ κ°κ° μ¬μ©λ μλ μλ€. λ°λΌμ κ°μ²΄λ€μ μν μ€κ³λλ₯Ό λ§λ€μ΄μΌ νλ€.
- μ΄λ₯Ό νλ‘κ·Έλ¨μμλ ν΄λμ€(class)λΌκ³ νλ€. ν΄λμ€λ κ°μ²΄κ° κ°μ ΈμΌ ν κΈ°λ³Έ μ 보λ₯Ό λ΄μ μ½λλ‘ μΌμ’ μ μ€κ³λ μ½λλΌκ³ μκ°νλ©΄ λλ€.
- μλ₯Ό λ€μ΄, μΆκ΅¬ μ μλΌλ κ°μ²΄λ₯Ό λ§λ λ€λ©΄ μ μμ μ΄λ¦, ν¬μ§μ , μμν λ±μ κΈ°λ³Έμ μΌλ‘ κ°μ§κ³ μμ΄μΌ ν μμ±μ΄λ€. μ΄λ¬ν μ 보λ₯Ό ν΄λμ€μ λ΄κ³ μ€μ μμ±λλ κ°μ²΄μ λ μ΄λκ΅, μν₯λ―Ό κ°μ μ μ μ΄λ¦μ ν λΉνλ€.
- μ΄λ κ² ν΄μ μ€μ λ‘ μμ±λλ κ°μ²΄λ₯Ό μΈμ€ν΄μ€(instance)λΌκ³ νλ€.
λΆμ΄λΉ΅νκ³Ό λΆμ΄λΉ΅
- λΆμ΄λΉ΅ κ°κ²μλ λΆμ΄λΉ΅νμ΄ μκ³ , μ΄λ₯Ό μ΄μ©ν΄ μ¬λ¬ μ’ λ₯μ λΆμ΄λΉ΅μ λ§λ€ μ μλ€. μ΄μ μλ μ£Όλ‘ ν₯λΉ΅κ³Ό ν¬λ¦ΌλΉ΅ λ μ’ λ₯μλ€λ©΄ μ΅κ·Όμλ 컀μ€ν°λλ λΈλ£¨λ² 리 κ°μ λ€μν μ’ λ₯μ λΆμ΄λΉ΅μ΄ λ§λ€μ΄μ§κ³ μλ€.
- μ¦, μ λ§λ λΆμ΄λΉ΅νμ΄ μλ€λ©΄ μλ‘μ΄ μ’ λ₯μ λ€μν λΆμ΄λΉ΅μ λ§λλ κ²μ μ΄λ ΅μ§ μλ€.
- λ€μ λ§ν΄, μ λ§λ ν΄λμ€ μ½λκ° μλ€λ©΄ μ΄ μ½λλ‘ λ€μν μ’ λ₯μ μΈμ€ν΄μ€λ₯Ό μμ±ν μ μλ€λ κ²μ΄λ€. μ¬μ΄ κ°λ μ΄μ§λ§ μ½λλ₯Ό 보기 μ μλ μ μ΄ν΄λμ§ μμ μ μλ€.
νμ΄μ¬μ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°
- ν΄λμ€ κ΅¬ννκΈ°
- μ΄μ μ μμλ μΈκ³΅μ§λ₯ μΆκ΅¬ νλ‘κ·Έλ¨μ μλ‘ λ€μ΄ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ μ©μ΄λ₯Ό μ€λͺ νμλ€. μ€μ λ‘ μΆκ΅¬ μ μ ν΄λμ€λ₯Ό νμ΄μ¬μμ ꡬννλ μμ λΆν° μμνλ €κ³ νλ€.
- μμ½μ΄μΈ classλ₯Ό μ½λμ 맨 μμ μ λ ₯νκ³ , λ§λ€κ³ μ νλ ν΄λμ€ μ΄λ¦μ μμ±νλ€.
- κ·Έλ€μμΌλ‘ μμλ°μμΌ νλ λ€λ₯Έ ν΄λμ€μ μ΄λ¦μ κ΄νΈ μμ λ£λλ€.
[μ°Έκ³ ]
μμμ κΈ°μ‘΄μ λ§λ ν΄λμ€μ νΉμ§μ κ·Έλλ‘ μ΄μ΄λ°μ μ¬μ©νλ κ²μ λ§νλ€. κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ μ₯μ μ€ νλλ μ¬μ¬μ©μ±μ΄κ³ , μ΄λ₯Ό μμ½κ² νλ κ²μ΄ λ°λ‘ μμμ΄λ€.
νμ΄μ¬μμ μμ£Ό μ¬μ©νλ μλͺ κΈ°λ²
ν΄λμ€μ μ΄λ¦μ μ μΈν λ ν κ°μ§ νΉμ΄ν μ μ κΈ°μ‘΄κ³Ό λ€λ₯΄κ² 첫 κΈμμ μ€κ° κΈμκ° λλ¬ΈμλΌλ κ²μ΄λ€. μ΄κ²μ ν΄λμ€λ₯Ό μ μΈν λ μ¬μ©νλ μλͺ κΈ°λ²μ μν κ²μ΄λ€. νμ΄μ¬λΏλ§ μλλΌ λͺ¨λ μ»΄ν¨ν° νλ‘κ·Έλλ° μΈμ΄μμ λ³μ, ν΄λμ€, ν¨μλͺ μ μ§λ μλͺ κΈ°λ²μ΄ μλ€.
μλͺ κΈ°λ² μ€λͺ
snake_case | λμ΄μ°κΈ° λΆλΆμ λ₯Ό μΆκ°νμ¬ λ³μμ μ΄λ¦μ μ§μ νλ€. νμ΄μ¬ ν¨μλ λ³μλͺ μ μ¬μ©λλ€. |
CamelCase | λμ΄μ°κΈ° λΆλΆμ λλ¬Έμλ₯Ό μ¬μ©νμ¬ λ³μμ μ΄λ¦μ μ§μ νλ€. λνμ νΉμ²λΌ μκ²Όλ€ νμ¬ Camelμ΄λΌκ³ λΆλ₯΄κ³ , μ£Όλ‘ νμ΄μ¬ ν΄λμ€λͺ μ μ¬μ©λλ€. |
- μμ±μ μ μΈ
- λ¨Όμ ν΄λμ€μ μμ±μ μΆκ°νλ μ μΈμ λν΄ μμ보μ.
- μμ±μ λν μ 보λ₯Ό μ μΈνκΈ° μν΄μλ _ init_()λΌλ μμ½ ν¨μλ₯Ό μ¬μ©νλ€.
- νμ΄μ¬ ν΄λμ€μμλ λͺ κ°μ μμ½ ν¨μκ° μλλ°. λνμ μΈ κ²μ΄ init()μ΄κ³ , μ΄ μΈμ __ str __, __ add __λ±μ΄ μλ€. μ΄λ¬ν ν¨μλ€μ μ½μλ ννμ μμ μ μνμμΌ μ€λ€.
class SoccerPlayer(object): def__init__(self, name, position, back_number): self.name = name self.position = position self.back_number = back_number
- __ init() __ν¨μλ μ΄ ν΄λμ€μμ μ¬μ©ν λ³μλ₯Ό μ μνλ ν¨μμ΄λ€.
- __ init() __ν¨μμ 첫 λ²μ§Έ 맀κ°λ³μλ λ°λμ self λ³μλ₯Ό μ¬μ©ν΄μΌ νλ€. self λ³μλ ν΄λμ€μμ μμ±λ μΈμ€ν΄μ€μ μ κ·Όνλ μμ½μ΄μ΄λ€. μμ±λ μΈμ€ν΄μ€λ₯Ό μ§μ νλ λ³μλΌκ³ μκ°νλ©΄ λλ€.
- self λ€μ 맀κ°λ³μλ€μ μ€μ λ‘ ν΄λμ€κ° κ°μ§ μμ±μΌλ‘ μΆκ΅¬ μ μμ μ΄λ¦, ν¬μ§μ , λ± λ²νΈ λ± μ΄λ€. μ΄ κ°λ€μ μ€μ λ‘ μμ±λλ μΈμ€ν΄μ€μ ν λΉλλ€.
- ν λΉλλ μ½λλ self.name = name μ΄λ€. μ΄λ λμ λ리νκ³Ό λΉμ·νλ°, μμ±λ μΈμ€ν΄μ€μ μλ name λ³μμ 맀κ°λ³μλ‘ μ λ ₯λ nameμ΄λΌλ κ°μ ν λΉνλ€λ λ»μ΄λ€. ν΄λμ€μ λ³μλ ‘self.λ³μμ΄λ¦’μΌλ‘ __ init() __ ν¨μμμ μμ λ‘κ² μμ±ν μ μλ€.
- λ¬Όλ‘ νμ΄μ¬μ μΈν°νλ¦¬ν° μΈμ΄μ΄κ³ λμ νμ΄ν μΈμ΄ μ΄λ―λ‘, ν΄λμ€ λ΄ λ€λ₯Έ ν¨μμμλ μ΄μ κ°μ μμ±μ μμ±μ΄ κ°λ₯νλ€. κ·Έλ¬λ μΌλ°μ μΌλ‘ __ 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κ° μμ΄μΌλ§ μ€μ λ‘ μΈμ€ν΄μ€κ° μ¬μ©ν μ μλ ν¨μλ‘ μ μΈλλ€.
_μ μ°μ
- μΌλ°μ μΌλ‘ νμ΄μ¬μμ _μ μ°μμ κ°μμ λ°λΌ μ¬λ¬ κ°μ§λ‘ λλ μ μλ€. μλ₯Ό λ€μ΄ _ 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
- μ μ½λλ ‘Hello, World’λ₯Ό νλ©΄μ 10λ² μΆλ ₯νλ ν¨μμ΄λ€. νμλ₯Ό μΈλ _ λ³μλ νΉλ³ν μ©λκ° μμΌλ―λ‘ λ€μμ μ¬μ©λμ§ μλλ€. λ°λΌμ _λ₯Ό μμμ λ³μλͺ λμ μ μ¬μ©νλ€.
- λ λ€λ₯Έ μ©λλ‘ _ 2κ°λ₯Ό μ¬μ©νλ©΄ νΉμν μμ½ ν¨μλ λ³μλ₯Ό μλ―Ένλ€. λνμ μΌλ‘ __ str() __ μ΄λ __ init() __ κ°μ ν¨μμ΄λ€. __ str() __ ν¨μλ ν΄λμ€λ‘ μΈμ€ν΄μ€λ₯Ό μμ±νμ λ, κ·Έ μΈμ€ν΄μ€ μ체λ₯Ό print() ν¨μλ‘ νλ©΄μ μΆλ ₯νλ©΄ λμ€λ κ°μ λ»νλ€.
μΈμ€ν΄μ€ μ¬μ©νκΈ°
μμ±λ ν΄λμ€λ₯Ό μΈμ€ν΄μ€λ‘ νΈμΆν΄ μ¬μ©νλ λ°©λ²
- μΈμ€ν΄μ€λ ν΄λμ€μμ μ€μ μ μΈ λ°μ΄ν°κ° μ λ ₯λμ΄ μ¬μ©ν μ μλ ννμ κ°μ²΄λ₯Ό λ»νλ€. μμμ λΆμ΄λΉ΅ νμ ν΄λμ€μ, λΆμ΄λΉ΅μ μΈμ€ν΄μ€μ λΉμ νλλ°, μΈμ€ν΄μ€λ μ¬λ¬ κ°μ§ μ¬λ£κ° λ€μ΄κ° λΆμ΄λΉ΅ μ체μ λΉμ ν μ μλ€.
- μμμ ν΄λμ€λ₯Ό ꡬνν λ 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)
#μ€ν κ²°κ³Ό
νμ¬ μ μμ λ±λ²νΈλ: 10 #16ν μ€ν κ²°κ³Ό
μ μμ λ±λ²νΈλ₯Ό λ³κ²½νλ€: From 10 to 5 #17ν μ€ν κ²°κ³Ό
νμ¬ μ μμ λ±λ²νΈλ: 5 #18ν μ€ν κ²°κ³Ό
- jinhyun = SoccerPlayer("Jinhyun", "MF", 10) μ½λλ‘ μΈμ€ν΄μ€λ₯Ό μλ‘κ² λ§λ€μλ€. λ§λ€μ΄μ§ μΈμ€ν΄μ€μΈ jinhyunμ name, position, back_numberμ κ°κ° Jinhyun, MF, 10μ΄ ν λΉλμλ€. ν λΉλ κ°μ λ§λ€μ΄μ§ μΈμ€ν΄μ€μμ μ¬μ©νκΈ° μν΄μ jinhyun.back_number νμμΌλ‘ μΈμ€ν΄μ€ λ΄μ κ°μ νΈμΆνκ³ μλ€.
- μ¬κΈ°μ μ€μν κ²μ μΈμ€ν΄μ€κ° μμ±λ νμλ ν΄λΉ μΈμ€ν΄μ€μ μ΄λ¦μΌλ‘ κ°μ ν λΉνκ±°λ ν¨μλ₯Ό λΆλ₯΄λ©΄ λμ§λ§, ν΄λμ€ λ΄μμλ selfλ‘ νΈμΆλλ€. μ¦, μμ±λ μΈμ€ν΄μ€μΈ jinhyunκ³Ό ν΄λμ€ λ΄ selfκ° κ°μ μν μ νλ κ²μ΄λ€.
- ν¨μλ₯Ό νΈμΆν λλ μΈμ€ν΄μ€μ μ΄λ¦κ³Ό ν¨μλͺ μ μ¬μ©νλ€. μ¬κΈ°μλ jinhyun. change_back_number(5) λ₯Ό μ¬μ©ν΄ ν΄λμ€ λ΄μ ν¨μλ₯Ό μ¬μ©νμλ€. μμ μ½λμ μ΄μ΄μ 19νμΌλ‘ print( jinhyun)μ μ λ ₯νλ©΄ λ€μκ³Ό κ°μ κ²°κ³Όκ° μΆλ ₯λλ€.
Hello, My name is Jinhyun. I play in MF in center.
- μμ±λ μΈμ€ν΄μ€μΈ jinhyunμ print() ν¨μμμ μ¬μ©νμ λ λνλλ κ²°κ³Όμ΄λ€.
- μ΄λ μμ μ½λμ 10 , 11νμμ ν΄λμ€ λ΄ ν¨μλ‘ μ μΈλμκΈ° λλ¬Έμ΄λ€. 10νμμ __ str() __ ν¨μλ‘ μ μΈλ λΆλΆμ΄ print() ν¨μλ₯Ό μ¬μ©νλ©΄ λ°νλλ ν¨μμ΄λ€.
- μΈμ€ν΄μ€μ μ 보λ₯Ό νμνκ±°λ ꡬλΆν λ __srt__λ¬Έμ μ¬μ©νλ©΄ λλ€.
- μ΄μ²λΌ μμ½ ν¨μλ νΉμ 쑰건μμ μλνλ ν¨μλ‘ μ μ©νλ€.
ν΄λμ€λ₯Ό μ¬μ©νλ μ΄μ
- ν΅μ¬μ μμ μ μ½λλ₯Ό λ€λ₯Έ μ¬λμ΄ μμ½κ² μ¬μ©ν μ μλλ‘ μ€κ³νκΈ° μν¨μ΄λ€. λ§μ½ λ¨μν λ°μ΄ν°λ₯Ό μ μ₯νκΈ° μν μλ¨μΌλ‘ μ¬μ©νλ€λ©΄ μ΄μ°¨μ 리μ€νΈλ 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)
print(players[0])
# μ 체 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])
[['Messi', 'MF', 10], ['Ramos’, ’DF', 4], ['Ronaldo', 'CF', 7], ['Park', 'WF', 13],
['Buffon', 'GK', 1]] # 8ν μ€ν κ²°κ³Ό
['Messi', 'MF', 10] # 9ν μ€ν κ²°κ³Ό
Hello, My name is Messi. I play in MF in center. # 25ν μ€ν κ²°κ³Ό
μ€μ΅
λ ΈνΈλΆ νλ‘κ·Έλ¨ λ§λ€κΈ° μ€κ³
- λ ΈνΈλΆ νλ‘κ·Έλ¨ → μ»΄ν¨ν° ννμ λ ΈνΈλΆμ λ»νλ κ²μ΄ μλλΌ νν κ³΅μ± μ κΈ°λ₯μΌλ‘ μ¬μ©νλ λ ΈνΈ μ±μ λ§νλ€.
- κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ μ΄μ©νμ¬ νλ‘κ·Έλ¨μ λ§λ€κΈ° μν΄ κ°μ₯ λ¨Όμ ν΄μΌ ν μΌμ νλ‘κ·Έλ¨ μ€κ³μ΄λ€.
- μ΄ νλ‘κ·Έλ¨μ μ΄λ€ κ°μ²΄κ° νμν κΉ?
- μ΄λ€ κΈ°λ₯μ μ΄λ»κ² μ μν΄ μ¬μ©ν΄μΌ ν κΉ?
- μ΄λ€ λ°μ΄ν°λ₯Ό μ μ₯ν΄μΌ ν κΉ?
μ¬μ©μμ μꡬ μ¬ν
- λ ΈνΈ(note)λ₯Ό μ 리νλ νλ‘κ·Έλ¨μ΄λ€.
- μ¬μ©μλ λ ΈνΈμ μ½ν μΈ λ₯Ό μ μ μ μλ€.
- λ ΈνΈλ λ ΈνΈλΆ(notebook)μ μ½μ λλ€.
- λ ΈνΈλΆμνμ΄ν(title)μ΄μλ€.
- λ ΈνΈλΆμ λ ΈνΈκ° μ½μ λ λ νμ΄μ§λ₯Ό μμ±νλ©°, μ΅λ 300νμ΄μ§κΉμ§ μ μ₯ν μ μλ€.
- 300νμ΄μ§λ₯Ό λκΈ°λ©΄ λ ΈνΈλ₯Ό λμ΄μ μ½μ νμ§ λͺ»νλ€.
μ°λ¦¬κ° λ§λ€μ΄μΌ νλ κ°μ²΄μ λν μ λ³΄κ° μλλ°, μ¬μ©μ, λ ΈνΈ, λ ΈνΈλΆ λ±μ΄ κ°μ²΄κ° λλ€.
μ μ₯νλ λ°μ΄ν°, μ¦ λ³μ μ μ
- κ°μ₯ κΈ°λ³Έμ μΈ κ²μ μ λ ₯ν΄μΌ ν μ½ν μΈ κ° μκ³ , λ ΈνΈλ§λ€ ν μ΄μ§κ° μμ±λμ΄μΌ νλ€. λ λ ΈνΈλΆμ λ ΈνΈλΌκ³ νλ κ°μ²΄μ νμ΄νμ ν¬ν¨ν΄μΌ νλ€.
κΈ°λ₯functionμ λν μ μ
- λ ΈνΈλΆμ μ μ₯κ³Ό λ ΈνΈμ μ μ₯
- μ¦ κ°κ°μ κ°μ²΄λ³λ‘ κΈ°λ₯μ μ μν΄μΌ νλ€. λ ΈνΈλ λ΄μ©μ μ λ ₯νλ ν¨μμ μ§μ°λ ν¨μκ° νμνλ€. κ·Έλ¦¬κ³ λ ΈνΈλΆμ λ ΈνΈλ₯Ό μΆκ°νκ±°λ μ§μ°λ λ±μ ν¨μκ° νμνλ€.
- κ·Έ μΈ 300νμ΄μ§ λ±μ λν λ‘μ§μ λ°λ‘ μ μνμ¬ ν¨μ μμ λ£μ΄μΌ ν λ€.
κ΅¬λΆ Notebook Note
λ©μλ | add_note , remove_note get_number_of_pages | write_content, remove_all |
λ³μ | title | |
page_number | ||
notes | contents |
μλ‘μ΄ Notebookμ μμ±νλ μ½λ
>>> wise_saying_notebook = NoteBook("λͺ
μΈ λ
ΈνΈ")
>>> wise_saying_notebook.add_note(note_1)
>>> wise_saying_notebook.add_note(note_2)
>>> wise_saying_notebook.add_note(note_3)
>>> wise_saying_notebook.add_note(note_4)
- μλ‘μ΄ λ ΈνΈλΆμ μμ±ν ν κΈ°μ‘΄μ Noteλ€μ add_note() ν¨μλ‘ μΆκ°νλ€.
>>> wise_saying_notebook = NoteBook("λͺ
μΈ λ
ΈνΈ")
>>> wise_saying_notebook.add_note(note_1)
>>> wise_saying_notebook.add_note(note_2)
>>> wise_saying_notebook.add_note(note_3)
>>> wise_saying_notebook.add_note(note_4)
>>> print(wise_saying_notebook.get_number_of_all_pages())
4
>>> print(wise_saying_notebook.get_number_of_all_characters())
159
- Note 4μ₯μ μΆκ°νμμΌλ―λ‘ get_number_of_all_pages( ) ν¨μλ₯Ό μ¬μ©νλ©΄ μ΄ νμ΄μ§ μκ° μΆλ ₯λκ³ , get_number_of_all characters() ν¨μλ₯Ό μ¬μ©νλ©΄ μ΄ κΈμ μκ° μΆλ ₯λλ€.
>>> wise_saying_notebook.remove_note(3)
>>> print(wise_saying_notebook.get_number_of_all_pages())
3
>>>
>>> wise_saying_notebook.add_note(note_1, 100)
ν΄λΉ νμ΄μ§μλ μ΄λ―Έ λ
ΈνΈκ° μ‘΄μ¬ν©λλ€.
>>>
>>> for i in range(300):
... wise_saying_notebook.add_note(note_1, i)
ν΄λΉ νμ΄μ§μλ μ΄λ―Έ λ
ΈνΈκ° μ‘΄μ¬ν©λλ€.
ν΄λΉ νμ΄μ§μλ μ΄λ―Έ λ
ΈνΈκ° μ‘΄μ¬ν©λλ€.
ν΄λΉ νμ΄μ§μλ μ΄λ―Έ λ
ΈνΈκ° μ‘΄μ¬ν©λλ€.
ν΄λΉ νμ΄μ§μλ μ΄λ―Έ λ
ΈνΈκ° μ‘΄μ¬ν©λλ€.
>>> print(wise_saying_notebook.get_number_of_all_pages())
300
- λ ΈνΈμ μμ λ μΆκ°λ μ¬λ¬ κ°μ§ λͺ λ Ήμ΄λ‘ κ°λ₯νλ€.
- νΉμ Noteλ₯Ό μ§μ°λ remove_note()λ₯Ό μ¬μ©νκ±°λ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ° κ°λ μΌλ‘ μλ‘μ΄ λΉ λ ΈνΈλ₯Ό μμλ‘ μΆκ°ν μλ μλ€. κΈ°μ‘΄ νμ΄μ§μ λ ΈνΈλ₯Ό μΆκ°νλ €κ³ νλ©΄ μ€λ₯ λ©μμ§λ μΆλ ₯λλ€.
κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ νΉμ§
- κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ μ μ°¨μ μΈ νλ‘κ·Έλλ°κ³Ό λΉκ΅ν΄ μ¬λ¬ κ°μ§ νΉμ§μ΄ μλ€.
- κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ κΈ°λ³Έ μ² νμλ μ€μνμ λͺ¨λΈλ§νλ€λ κ°λ μ΄ μκΈ° λλ¬Έμ λλΆλΆμ΄ μ€μνμ μ‘΄μ¬νλ λ€μν κ°λ μ μ½κ² νλ‘κ·Έλλ°νκΈ° μν νΉμ§λ€μ΄λ€. κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ νΉμ§μλ ν¬κ² μμ, λ€νμ±, κ°μμ±μ΄ μλ€. λͺ¨λ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°λΏλ§ μλλΌ μμ±λ νμ΄μ¬ νλ‘κ·Έλλ°μ νλλ°λ λ§€μ° μ€μν κ°λ μ΄λ€.
μμ
- μμ(inheritance)μ μ΄λ¦ κ·Έλλ‘ λ¬΄μμΈκ°λ₯Ό λ΄λ €λ°λ κ²μ λ»νλ€.
- λΆλͺ¨ν΄λμ€μ μ μλ μμ±κ³Ό λ©μλλ₯Ό μμ ν΄λμ€κ° λ¬Όλ €λ°μ μ¬μ©νλ€λ κ²μ΄λ€.
class Person(object):
pass
- classλΌλ μμ½μ΄ λ€μμ ν΄λμ€λͺ μΌλ‘ Personμ μ°κ³ () μμ objectλ₯Ό μ λ ₯νμλ€. μ¬κΈ°μ objectκ° λ°λ‘ Person ν΄λμ€μ λΆλͺ¨ ν΄λμ€μ΄λ€.
- objectλ νμ΄μ¬μμ μ¬μ©νλ κ°μ₯ κΈ°λ³Έ κ°μ²΄ base 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 ν΄λμ€λ₯Ό μμ±νμλ€.
- Person ν΄λμ€μλ μμ±μ init() ν¨μλ₯Ό λ§λ€μ΄ nameκ³Ό ageμ κ΄λ ¨λ μ 보λ₯Ό μ λ ₯ν μ μλλ‘ νμλ€.
- λ€μμΌλ‘ Korean ν΄λμ€λ₯Ό λ§λ€λ©΄μ Person ν΄λμ€λ₯Ό μμλ°μλ€. class Korean(Person)κ³Ό κ°μ΄ μμ±νλ©΄ κ°λ¨ν μμ λ°μ μ μλ€. κ·Έλ¦¬κ³ passλ λ³λμ λ΄μ© μμ΄ ν΄λμ€λ§ μ‘΄μ¬νλ€λ λ»μ΄λ€.
- μ¦, λ³λμ λ΄μ©μ΄ μλ Korean ν΄λμ€ μΈμ€ν΄μ€λ₯Ό λ§λ κ²μ΄λ€. Korean ν΄λμ€λ λ³λμ μμ±μλ μμ§λ§, Person ν΄λμ€κ° κ°μ§ μμ±μλ₯Ό κ·Έλλ‘ μ¬μ©νμ¬ μΈμ€ν΄μ€λ₯Ό λ§λ€μλ€. κ·Έλμ Person ν΄λμ€μμ μμ±ν λ³μλ₯Ό κ·Έλλ‘ μ¬μ©ν μ μλ€. μ΄λ¬ν κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ νΉμ§μ μμμ΄λΌκ³ νλ€.
- μμμ λνλ‘ νννλ©΄ μμ κ°λ€. μ¬κ°νμ΄ ν΄λμ€μ΄κ³ , νμ΄νλ κ° ν΄λμ€μ μμ κ΄κ³μ΄λ€. μ¦, Person ν΄λμ€λ₯Ό Employeeκ° μμλ°κ³ , μ΄ ν΄λμ€λ₯Ό λ€μ νλ² Manager, Staff, Hourly λ±μ΄ μμλ°λ κ²μ΄λ€.
- μΌλ°μ μΌλ‘ μμμ νκ² λλ©΄ λΆλͺ¨ ν΄λμ€λ³΄λ€ μμ ν΄λμ€μ μ λ³΄κ° λ ꡬ체νλλ€. κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μΌλ‘ νλ‘κ·Έλ¨μ μμ±ν λ μ΄λ¬ν μμ ꡬ쑰λ₯Ό μ€κ³ν΄μΌ νλ€.
- νΉν μμμ΄ μ§νλ μλ‘ λΆλͺ¨ ν΄λμ€μ λν΄ κ° ν΄λμ€μ κΈ°λ₯μ΄ κ΅¬μ²΄νλλλ‘ λΆλͺ¨ κ°μ²΄μλ μΌλ°μ μΈ κΈ°λ₯μ, μμ κ°μ²΄μλ μμΈν κΈ°λ₯μ λ£μ΄μΌ νλ€.
- κ·Έλ¦¬κ³ κ°μ μΌμ νλ λ©μλλΌ νλλΌλ λΆλͺ¨ κ°μ²΄λ³΄λ€ μμ κ°μ²΄μ μ’ λ λ§μ μ 보λ₯Ό μ€ μλ μλ€. μ΄λ₯Ό ‘λΆλͺ¨ ν΄λμ€μ λ©μλλ₯Ό μ¬μ μνλ€’λΌκ³ νλ€.
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), "μ΄μ
λλ€.")
- λ¨Όμ λΆλͺ¨ ν΄λμ€κ° Personμ΄λ€. name, age, genderμ λν΄ λ³μλ₯Ό μ μΈνμκ³ , about_ me ν¨μλ₯Ό μ¬μ©νμ¬ μμ±λ μΈμ€ν΄μ€κ° μμ μ μ€λͺ ν μ μλλ‘ νμλ€. μ¬μ€ str() ν¨μμ λ€μ΄κ°λ λλ ν΄λμ€μ΄μ§λ§ μμμ about_me ν΄λμ€λ₯Ό μμ±νμλ€.
λ€μμΌλ‘ μμ λ°λ Employee ν΄λμ€
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_work(self): #μλ‘μ΄ λ©μλ μΆκ°
print("μ΄μ¬ν μΌμνλ€.")
def about_me(self): #λΆλͺ¨ ν΄λμ€ ν¨μ μ¬μ μ
super().about_me() #λΆλͺ¨ ν΄λμ€ ν¨μ μ¬μ©
print ("μ κΈμ¬λ", self.salary, "μμ΄κ³ , μ μ
μ¬μΌμ", self.hire_date, "μ
λλ€.")
- Person ν΄λμ€κ° λ¨μν μ¬λμ λν μ 보λ₯Ό μ μνλ€λ©΄, Employee ν΄λμ€λ μ¬λμ λν μ μμ ν¨κ» μΌνλ μκ°κ³Ό μκΈμ λν λ³μλ₯Ό μΆκ°νλ€. μ¦ init() ν¨μλ₯Ό μ¬μ μ νλ€.
- μ΄λ λΆλͺ¨ ν΄λμ€μ init () ν¨μλ₯Ό κ·Έλλ‘ μ¬μ©νλ €λ©΄ λ³λμ init() ν¨μλ₯Ό λ§λ€μ§ μμλ λλ€. νμ§λ§ κΈ°μ‘΄ ν¨μλ₯Ό μ¬μ©νλ©΄μ μλ‘μ΄ λ΄μ©μ μΆκ°νκΈ° μν΄μλ μμ ν΄λμ€μ init() ν¨μλ₯Ό μμ±ν λ super().init(맀κ°λ³μ) λΌκ³ μ λ ₯νλ€.
- μ¬κΈ°μ super()λ λΆλͺ¨ ν΄λμ€λ₯Ό κ°λ¦¬ν¨λ€. μ¦, λΆλͺ¨ ν΄λμ€μ __ init()__ ν¨μλ₯Ό κ·Έλλ‘ μ¬μ©νλ€λ λ»μ΄λ€. κ·Έλ¦¬κ³ κ·Έ μλμλ μμ ν΄λμ€μμ νμν μλ‘μ΄ λ³μλ₯Ό μΆκ°νλ©΄ λλ€.
- μ΄λ¬ν ν¨μμ μ¬μ μλ₯Ό μ€λ²λΌμ΄λ©( overriding)μ΄λΌκ³ νλ€. μ€λ²λΌμ΄λ©μ μμ μ ν¨μ μ΄λ¦κ³Ό νμν 맀κ°λ³μλ κ·Έλλ‘ μ μ§νλ©΄μ ν¨μμ μν μ½λλ₯Ό λ³κ²½νλ κ²μ΄λ€.
- κ°μ λ°©μμΌλ‘ about_me() ν¨μκ° μ€λ²λΌμ΄λ©λ κ²μ νμΈν μ μλ€. Personκ³Ό Employeeμ λν μ€λͺ μ μΆκ°ν κ²μ΄λ€. μ μ½λλ€μ μ€λͺ μ μ©μ΄μ±μ μν΄ ν μ€νΈ ννμ μ€λͺ λ§ μΆκ°νμμ§λ§ μ€μ λ‘λ νλ‘κ·Έλ¨μ μ¬μ©νκΈ° μν λ€μν κΈ°λ₯μ΄ μΆκ°λ μ μλ€.
- do_workμ²λΌ μμ ν΄λμ€μλ§ νμν μλ‘μ΄ ν¨μλ₯Ό μμ±ν μλ μλ€. μμ μ€λͺ νλ―μ΄ μ μ ν΄λμ€λ λΆλͺ¨ ν΄λμ€λ³΄λ€ λ μμΈν μΌμ νλ€. λ°λΌμ μμ ν΄λμ€κ° μλ‘μ΄ κΈ°λ₯μ μνν μ μλλ‘ μ½λλ₯Ό μμ±ν΄μΌ νλ€.
- νμ΄μ¬μμλ μ΄μΈμλ λ€μν μμ κΈ°λ₯μ μ§μνλ€. μλ₯Ό λ€μ΄, 1κ° μ΄μμ ν΄λμ€ νΉμ§μ μμνλ λ€μ€μμμ μ§μνκΈ°λ νλ€. μ΄λ¬ν μΈλΆμ μΈ κΈ°λ₯μ νμ΄μ¬μ μ¬μ©νμ¬ λ³Έκ²©μ μΈ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ ν λ νμνλ€.
λ€νμ±
- λ€νμ± (polymorphism)μ κ°μ μ΄λ¦μ λ©μλκ° λ€λ₯Έ κΈ°λ₯μ νλ κ²μ λ§νλ€. μ¬μ€ μ΄ κΈ°λ₯μ μμμμ μ΄λ―Έ νμΈνμλ€. μλ₯Ό λ€μ΄, about_meλΌλ ν¨μλ₯Ό λΆλͺ¨ ν΄λμ€μ μμ ν΄λμ€κ° μλ‘ λ€λ₯΄κ² ꡬννλλ°, μ΄κ²λ μΌμ’ μ λ€νμ±μ΄λ€.
λ€νμ±μ μ¬μ©νλ μ΄μ
- κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ μ¬μ©νλ μ΄μ λ₯Ό μκ°νλ©΄ κ°λ¨νλ€. κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ λ€λ₯Έ μ¬λμ μ½λλ₯Ό μ½κ² μ¬μ¬μ©νκΈ° μν΄ μ¬μ©νλ€κ³ μΈκΈνμλ€. μ΄λ₯Ό μν΄μλ λ΄λΆμ μΈ κ΅¬ν κ³Όμ μ μ λͺ¨λ₯΄λλΌλ κ·Έ ν¨μλ ν΄λμ€μ μν μ λͺ νν μ νμκ° μλ€.
- μΈν°λ·μμ λ°μ΄ν°λ₯Ό λͺ¨μΌλ νλ‘κ·Έλ¨μ ν¬λ‘€λ¬ crawlerλΌκ³ νλλ°. μ΄λ²μλ λ΄μ€λ₯Ό λͺ¨μΌλ ν¬λ‘€λ¬λ₯Ό λ§λ€μ΄λ³΄λ©΄μ μ€λͺ νκ² λ€.
- λ¨Όμ λΆλͺ¨ Crawler ν΄λμ€λ₯Ό λ§λ€κ³ do_crawlingμ΄λΌ λ ν¨μλ₯Ό μμ±νλ€. κ·Έλ¦¬κ³ Crawler ν΄λμ€λ₯Ό μμμμΌ NaverCrawlerμ DaumCrawlerλ₯Ό λ§λ λ€. μ΄μ λ μμ ν΄λμ€λ λͺ¨λ do_crawling ν¨μλ₯Ό κ°κ² λλ€.
- κ°μ μ΄λ¦μ΄μ§λ§ ꡬν λ΄μ©μ λ€λ₯΄λ€. κ°κ° ν΄λμ€μμ ꡬνλλ λ΄λΆ λ‘μ§μ μ°¨μ΄κ° μλλ°, μ΄λ₯Ό ν¨μμ λ€νμ±μ΄λΌκ³ νλ€. μ¬κΈ°μ Crawler ν΄λμ€λ€μ do_crawling ν¨μλ κ°κ° λ€μ΄λ²μ λ€μμμ λ΄μ€λ₯Ό κ°μ Έμ€λ μν μ νλ€. ν΄λΉ ν΄λμ€μ μ¬μ©μλ λ°μ΄ν°λ₯Ό μ΄λ»κ² κ°μ Έμ€λμ§ λͺ¨λ₯΄μ§λ§ κ²°κ³Όλ λ ν΄λμ€ λͺ¨λ κ°λ€λ κ²μ μ μ μλ€.
n_crawler = NaverCrawler()
d_crawler = DaumCrawler()
cralwers = [n_crawler, d_crawler]
news=[]
for cralwer in cralwers:
news.append(cralwer.do_crawling())
- ν΄λΉ ν΄λμ€μ μ¬μ©μ μ μ₯μμλ ν¨μμ μ΄λ¦λ§ μλ©΄ κ°μ ννλ‘ μ¬μ©ν μ μμ§λ§, ν΄λμ€μ κ°λ°μ μ μ₯μμλ λ΄λΆμ μΈ κ΅¬νμ κ° ν΄λμ€λ³ λ€λ₯΄κ² κ°λ°ν νμκ° μλ€.
- μ΄λ₯Ό λ€νμ±μ΄λΌκ³ νλλ°, λ€νμ±μ μ¬μ©νλ©΄ νλ‘κ·Έλ¨μ μμ±ν λ μ¬μ©μκ° μ’ λ μ½κ² ν΄λμ€λ₯Ό μ¬μ© ν μ μλ€.
class Animal:
def __init__(self, name):
self.name = name
def talk(self):
raise NotlmplementedErrorC’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())
#15~17ν μ€ν κ²°κ³Ό
Missy: Meow!
Mr. Mistoffelees: Meow!
Lassie: Woof! Woof!
- μ μ½λλ μμ¬μ½λλ‘ μ€μ μλλμ§λ μκ³ λ¨μ§ λ€νμ±μ μ€λͺ νκΈ° μν΄ λ§λ μ½λμ΄λ€.
- μ½λμμ λΆλͺ¨ ν΄λμ€λ Animalμ΄λ©°, Catκ³Ό Dogλ Animal ν΄λμ€λ₯Ό μμλ°λλ€. ν΅μ¬ ν¨μλ talkλ‘, κ°κ° λ λλ¬Ό ν΄λμ€μ μν μ΄ λ€λ₯Έ κ²μ νμΈν μ μλ€. Animal ν΄λμ€λ μμ§ μ€λͺ νμ§ μμμ§λ§ NotlmplementedErrorλΌλ ν΄λμ€λ₯Ό νΈμΆνλ€. μ΄ ν΄λμ€λ μμ ν΄λμ€μλ§ ν΄λΉ ν¨μλ₯Ό μ¬μ©ν μ μλλ‘ νλ€. λ°λΌμ λ ν΄λμ€κ° λ΄λΆ λ‘μ§μμ κ°μ μ΄λ¦μ ν¨μλ₯Ό μ¬μ©νμ¬ κ²°κ³Όλ₯Ό μΆλ ₯νλλ‘ νλ€. μ μλ λͺ¨λ ν΄λμ€λ 15γ 17νκ³Ό κ°μ΄ μ¬μ©ν μ μλ€.
κ°μμ±
- κ°μμ±μ κ°μ²΄μ μ 보λ₯Ό λ³Ό μ μλ λ 벨μ μ‘°μ νμ¬ κ°μ²΄μ μ 보 μ κ·Όμ μ¨κΈ°λ κ²μ λ§νλλ°, μ΄ νΉμ§μ λ€μν μ΄λ¦μΌλ‘ λΆλ¦¬κ³ μλ€.
- νμ΄μ¬μμλ κ°μμ±μ΄λΌκ³ νμ§λ§ μ’ λ μ€μν ν΅μ¬ κ°λ μ μΊ‘μν(encapsulation)μ μ 보 μλ (information hiding)μ΄λ€.
- νμ΄μ¬μμλ κ°μ²΄μ μ¬μ¬μ©μ μν΄ κ° κ°μ²΄κ° λ¬΄μ¨ μν μ νλμ§ μμμΌ νλ€. νμ§λ§ κ·Έμ λμμ ꡬνμ μΈλΆμ μΈ λ΄μ©μ λͺ¨λ μ νμλ μλ€. λ¨μ§ μ¬μ©νλ λ°©λ²λ§ μλ©΄ λλ€. μ¦,κ°μ²΄μ 맀κ°λ³μ μΈν°νμ΄μ€λ§ λͺ νν μλ©΄ μ¬μ©ν μ μλ€.
- μ΄λ¬ν κ°λ μ μΊ‘μνλΌκ³ νλ©°, κ°μ²΄μ μΈλΆ λ΄μ©μ λͺ¨λ₯Έ μ± κ°μ²΄μ μ¬μ©λ²λ§ μκ³ μ¬μ©νλ€λ λ»μ΄λ€. λμμ νμν μ 보λ μ¨κ²¨μΌ νλ€.
- μΊ‘μν μ μ 보μλμΌλ‘ ννμ λ€λ₯΄κ² νμ§λ§ λ λ€ μ½λμ λ΄λΆκ΅¬νμ μν΄μ μΈλΆμμ μ½κ² μ¬μ©νκ² νκ³ , μ½λμ μΈλΆμ μΈ λ΄μ©μ λͺ¨λ₯΄κ² νλ€λ μΈ‘λ©΄μμ λΉμ·ν μλ―Έλ‘ μ¬μ©λλ€.
μΊ‘μνλ₯Ό μ¬μ©ν΄μΌ νλ μ΄μ
- μ¬λ¬ κ°μ§κ° μμ§λ§ μΌλ¨ ν΄λμ€λ₯Ό μ€κ³ν λ ν΄λμ€ κ° κ°μ λ° μ 보 곡μ λ₯Ό μ΅μννμ¬ κ°λ³ ν΄λμ€κ° λ¨λ μΌλ‘λ μ λμν μ μλλ‘ ν΄μΌ νκΈ° λλ¬Έμ΄λ€. κ° ν΄λμ€κ° κ°νκ² μ°κ²°λμ΄ μλ€λ©΄ λ 립μ μΌλ‘ μ¬μ©νκΈ° μ΄λ ΅λ€. λν, μ¬μ©μ μ μ₯μμλ μμΈν λ΄μ©μ λͺ¨λ₯΄λλΌλ μΈν°νμ΄μ€λ₯Ό μ΄ν΄νλ©΄ ν΄λμ€λ₯Ό μ½κ² μ¬μ©ν μ μλ€. νμ΄μ¬μμλ μ΄λ¬ν κ°λ μ κ°μμ±μ΄λΌλ μ΄λ¦μΌλ‘ μ μ©μν€κ³ , μ 보 μλμ μ΄λ»κ² ν κ²μΈκ°λ₯Ό μ½λ λ 벨μμ μ‘°μ νλ€.
μ€μ νμ΄μ¬μ κ°μμ± μ¬μ© λ°©λ² μμ
- μ½λλ₯Ό μμ±ν΄μΌ νλ μν©
<aside> π‘ Product κ°μ²΄λ₯Ό Inventory κ°μ²΄μ μΆκ° Inventoryμλ μ€μ§ Product κ°μ²΄λ§ λ€μ΄κ° Inventoryμ Productκ° λͺ κ°μΈμ§ νμΈμ΄ νμν¨ Inventoryμ Product itemsλ μ§μ μ κ·Όμ΄ λΆκ°ν¨
</aside>
class Product(object):
pass
class Inventory(object):
def __ init__(self):
self.__items =[]
def add_new_item(self, product):
if type(product) == Product:
self.__items.append(product)
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(Product())
my_inventory.add_new_item(Product())
my_inventory.__items
#μΆλ ₯κ²°κ³Ό
new item added # 17ν μ€ν κ²°κ³Ό
new item added # 18ν μ€ν κ²°κ³Ό
Traceback (most recent call last): # 20ν μ€ν κ²°κ³Ό
File "visibilityl.py", line 20, in <module>
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()μ΄ μλλΌ μ§μ ν΄λΉ κ°μ²΄μ μ κ·Όν΄ μλ‘μ΄ κ°μ μΆκ°νλ €κ³ νλ€λ©΄ μ΄λ»κ² ν κΉ?
- λ€λ₯Έ μ½λμμλ μ μ€νλλ€κ° 20νμ my_inventory._itemsμμ μ€λ₯κ° λ°μνλ€. μλνλ©΄ _κ° νΉμ μν μ νλ μμ½ λ¬Έμλ‘ ν΄λμ€μμ λ³μμ λ κ°κ° λΆμ΄μμ΄ μ¬μ©λ ν΄λμ€ λ΄λΆμμλ§ μ κ·Όν μ μκ³ , μΈλΆμλ νΈμΆνμ¬ μ¬μ©νμ§ λͺ»νκΈ° λλ¬Έμ΄λ€.
- μ¦, ν΄λμ€ λ΄λΆ μ©μΌλ‘λ§ λ³μλ₯Ό μ¬μ©νκ³ μΆλ€λ©΄ ‘__λ³μλͺ ’ ννλ‘ λ³μλ₯Ό μ μΈνλ€. μ΄λ¬ν νΉμ§μ μλ°μ μλ private variableμ΄λΌκ³ λ νλ€. μ¦, κ°μμ±μ ν΄λμ€ λ΄λ‘ νμ νλ©΄μ κ°μ΄ λ€λ₯΄κ² λ€μ΄κ°λκ²μλ§μμμλ€. μ΄λ₯Όμ 보μλμ΄λΌκ³ νλ€.
μ΄λ¬ν μ 보λ₯Ό ν΄λμ€ μΈλΆμμ μ¬μ©νκΈ° μν΄μλ μ΄λ»κ² ν΄μΌ ν κΉ?
- λ°μ½λ μ΄ν° (decorator)λΌκ³ λΆλ¦¬λ ©propertyλ₯Ό μ¬μ©νλ€.
- λ°μ½λ μ΄ν°λ ν΄λμ€μ κ° λ©μλ μλ¨μ μ½μ νμ¬ ν΄λΉ λ©μλμ κΈ°λ₯μ μΆκ°νλ νμ΄μ¬ λ¬Έλ²μ΄λ€.
class Inventory(object):
def __init__(self):
self.__items=[] # privateλ³μλ‘μ μΈ(νμΈμ΄μ κ·Όλͺ»ν¨)
@property # property λ°μ½λ μ΄ν°(μ¨κ²¨μ§ λ³μ λ°ν)
def items(self):
return self.__items
- μ²μ μ½λμ 14ν λ·λΆλΆμ μμ μ½λλ₯Ό μΆκ°νμ¬ ©propertyλ₯Ό μ¬μ©νλ©΄ ν΄λΉ λ³μλ₯Ό μΈλΆμμ μ¬μ©ν μ μλ€.
- λ€λ₯Έ μ½λλ κ·Έλλ‘ μ μ§νκ³ λ§μ§λ§μ itemsλΌλ μ΄λ¦μΌλ‘ λ©μλλ₯Ό λ§λ€λ©΄μ ©property λ₯Ό λ©μλ μλ¨μ μ λ ₯νλ€. κ·Έλ¦¬κ³ μΈλΆμμ μ¬μ©ν λ³μμΈ __itemsλ₯Ό λ°ννλ€. μ΄λ κ² μ½ λλ₯Ό μΆκ°νλ©΄ λ€μκ³Ό κ°μ΄ μΈλΆμμλ ν΄λΉ λ©μλλ₯Ό μ¬μ©ν μ μλ€.
>>> my—inventory = Inventory()
>>> items = my_inventory.items
>>> items.append(Product())
- μ΄λ² μ½λμμλ μ€λ₯κ° λ°μνμ§ μμλ€. μ¬κΈ°μ μ£Όλͺ©ν λΆλΆμ __items λ³μμ μλ μ΄λ¦ μ΄ μλ itemsλ‘ νΈμΆνλ€λ κ²μ΄λ€. λ°λ‘ ©propertyλ₯Ό λΆμΈ ν¨μ μ΄λ¦μΌλ‘ μ€μ __items λ₯Ό μ¬μ©ν μ μλ κ²μ΄λ€. μ΄λ κΈ°μ‘΄ private λ³μλ₯Ό λꡬλ μ¬μ©ν μ μλ public λ³μλ‘ λ°κΎΈλ λ°©λ² μ€ νλμ΄λ€.