π κ°μ²΄μ§ν₯ νλ‘κ·Έλλ° νμ΄μ¬(Python Object-Oriented Programming)
π₯ OOP(κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°)
- κ°μ²΄: μμ±(Attrivute, λ³μ(variable))κ³Ό νλ(Action, ν¨μ(method))μ κ°μ§
ex) AI μΆκ΅¬ νλ‘κ·Έλ¨μ μμ±νλ€κ³ κ°μ νλ€λ©΄,
κ°μ²΄ μ’ λ₯: ν, μ μ, μ¬ν, 곡 λ±
Action: μ μ - 곡μ μ°¨λ€, ν¨μ€νλ€ μ¬ν - νμ¬μ λΆλ€, κ²½κ³ λ₯Ό μ£Όλ€
Attribution: μ μ - μ μ μ΄λ¦, ν¬μ§μ , μμ ν ν - ν μ΄λ¦, ν μ°κ³ μ§, ν μμ μ μ
- ν΄λμ€(Class)μ μ€μ ꡬνμ²΄μΈ μΈμ€ν΄μ€(Instance)λ‘ λλ
π₯ Class μ μΈ: Class example(object) μ νμ
- method ꡬν: ν¨μ ꡬνκ³Ό λΉμ·νλ λ°λμ selfλ₯Ό μΆκ°ν΄ μ£Όμ΄μΌνλ€.
class exmaple():
def a(self, a):
statements
- object(instance) μ¬μ©νκΈ°: object μ΄λ¦ μ μΈκ³Ό μ΄κΈ°κ° μ λ ₯(μ‘΄μ¬ νλ€λ©΄)
a = example(oop) ---> def __init__(self, oop) / μ¬κΈ°μ __init__μ κ°μ²΄ μ΄κΈ°ν μμ½ ν¨μμ΄λ€.
π Class Naming
-> ν¨μμ λ³μλͺ μμλ snake_caseλ₯Ό λ§μ΄ μ¬μ©νκ³ , ν΄λμ€μμλ CamelCaseλ‘ μ΄λ¦μ λΆμ΄λ κ²μ΄ μ리μ‘κ³ μλ€.
π '_'λ 무μμΈκ°μ?
-> '_'λ νμ΄μ¬μμ λͺκ°μ§ κΈ°λ₯μ κ°μ§κ³ μλ€.
1. μΈν°ν리ν°μμμ λ§μ§λ§ κ°
κ·Έλ¦Όκ³Ό κ°μ΄ 3+3μ κ²°κ³Όλ₯Ό '_'λ‘ λ°μ μ°μ°μ μ§ννλ κ²μ μ μ μλ€.
2. 무μνλ κ°
κ·Έλ¦Όκ³Ό κ°μ΄ listμμ unpakingν΄μ€ λμ 4λ λ°μ§ μκ³ μ€νμ΄ κ°λ₯νλ€. λν '*'λ₯Ό νμ©ν΄ μ€κ°μ μ¬λ¬ κ°μ 무μν μλ μλ€.
ex) a, *_, e = tmp_list -> a = 1, e = 5μ κ°μ΄ μ μ₯λ¨.
3. μ«μμ μλ¦Ώμ ꡬλΆ
κ·Έλ¦Όκ³Ό κ°μ΄ μ«μμ μλ¦Ώμλ₯Ό ꡬλΆνμ¬ μ¬μ©μλ‘ νμ¬κΈ μ‘°κΈ λ³΄κΈ° νΈνκ² μμ±ν μ μλ€.
4. '_' λκ°λ₯Ό μ¬μ©ν λ€μ΄λ°
- μμ '_'κ° λ κ° λΆμ κ²½μ°: λ§ΉκΈλ§(mangling)μΌλ‘ λ³μλ₯Ό privateνκ² λ§λ€μ΄ λ€λ₯Έ μ¬λλ€μ΄ μ κ·Όνμ§ λͺ»νκ² νλ€.
μ½λλ₯Ό 보κ²λλ©΄ example ν΄λμ€λ₯Ό λ§λ€μλ€. κ·Έλ°ν aμ __bλ₯Ό νΈμΆν΄ 보μμ λ, __bλ attributeμλ¬κ° λλ κ²μ μ μ μλ€.
μ΄ κ²½μ°μ μ΄λ»κ² νΈμΆν μ μμκΉ?
λλΆλΆ ν¨μλ₯Ό νλ λ λ§λ€μ΄ κ°μ λ³κ²½νμ§ λͺ»νκ³ μ½κ²λ§ λ§λ€ μ μλ€.
- μ λ€λ‘ '_'κ° λ κ° λΆμ κ²½μ°: νμ΄μ¬μμ νΉλ³νκ² μ μν λ³μλ ν¨μμ μ¬μ©λ κ².(__init__, __main__ λ±) λ§€μ§ λ©μλλΌκ³ λ λΆλ¦°λ€κ³ νλ€.
π self λ 무μμΈκ°μ?
-> μμ±λ intance μκΈ° μμ μ κ°λ¦¬ν€λ λ§λ‘ classλ₯Ό μ¬μ©ν΄ instanceλ₯Ό μμνλ©΄ classλ΄λΆμμλ selfλ‘, μΈλΆμμλ instance μ΄λ¦(μμ±λ λΉμ)μΌλ‘ λλ€.
π₯ μμ(Inheritance): λΆλͺ¨ ν΄λμ€λ‘λΆν° μμ±κ³Ό νλμ λ¬Όλ €λ°λ μμ ν΄λμ€λ₯Ό μμ±νλ κ². super()μ μ¬μ©ν΄ λΆλ¬μ΄
class A(): -> class B(A): Bλ Aλ₯Ό μμλ°μλ€κ³ νκ³ Aλ₯Ό λΆλͺ¨ν΄λμ€, Bλ₯Ό μμν΄λμ€λΌκ³ νλ€.
π₯ λ€νμ±(Polymorphism): κ°μ μ΄λ¦ λ©μλμ λ΄λΆ μ‘°μ§λ€μ λ€λ₯΄κ² μμ±νλ κ².
π₯ κ°μμ±(Visibility): κ°μ²΄μ μ 보λ₯Ό λ³Ό μ μλ λ λ²¨λ‘ μ‘°μ νλ κ²μΌλ‘ κ°μ²΄ μμ λ³μλ₯Ό μμλ‘ μμ , μ κ·Όμ μ ννλ κ².
μΊ‘μνμ κ°λ μ μν μ μμ. λν μ κ·Όμ κ°λ₯νκ² λ§λ€κ³ μΆλ€λ©΄ λ°μ½λ μ΄μ μ μ¬μ©νμ¬ κ°λ₯
π₯ Decorateλ₯Ό μν νμ΅
- Fist-Class Object(μΌλ± ν¨μ, μΌκΈ κ°μ²΄): νμ΄μ¬μμ ν¨μλ₯Ό κ°λ₯΄ν€λ©° λ³μλ λ°μ΄ν° ꡬ쑰μ ν λΉμ΄ κ°λ₯ν κ°μ²΄λ‘ parameterλ‘ μ λ¬μ΄ κ°λ₯νκ³ λ¦¬ν΄κ°μΌλ‘ μ¬μ© κ°λ₯ν κ°μ²΄λ₯Ό λ§νλ€.
def square(x):
return x*x
f = square -> ν¨μλ₯Ό λ³μλ‘ μ¬μ©
- inner function: ν¨μ λ΄μ λ λ€λ₯Έ ν¨μκ° μ‘΄μ¬.
def p_msg(m):
def printer():
print(m)
printer() -> p_msgνΈμΆ μ λ΄λΆμμ printerλ₯Ό λ€μ νΈμΆ
- Closures: inner functionμ return κ°μΌλ‘ λ°ν.
def p_msg(m):
def printer():
print(m)
return printer -> a = p_msg("a")λ₯Ό μ§μ νλ€λ©΄ a()λ₯Ό ν λ aλ₯Ό μΆλ ₯νλ€.
π₯ λ°μ½λ μ΄ν°(Decorator)
- ν¨μλ₯Ό λ°μ λͺ λ Ήμ μΆκ°ν λ€ μ΄λ₯Ό λ€μ ν¨μ ννλ‘ λ°ννλ ν¨μλ‘ ν¨μ λ΄λΆλ₯Ό μμ νμ§ μκ³ κΈ°λ₯μ λ³νλ₯Ό μ£Όκ³ μΆμ λ μ¬μ©νλ€. μΌλ°μ μΌλ‘ ν¨μμ μ μ²λ¦¬λ νμ²λ¦¬μ λν νμκ° μμ λ μ¬μ©νλ€.
- 볡μ‘ν closureν¨μλ₯Ό κ°λ¨νκ² λ§λ€ μ μλ€.
π λͺ¨λκ³Ό νλ‘μ νΈ(Module and Project)
π₯ λͺ¨λ(Module): μ΄λ€ λμμ λΆλΆ νΉμ μ‘°κ°μ λ§νλ κ²μΌλ‘ νλ‘κ·Έλ¨(λͺ¨λ + λͺ¨λ + ... = ν° νλ‘κ·Έλ¨)
- ν¨ν€μ§(package): λͺ¨λμ λͺ¨μλμ λ¨μ, νλμ νλ‘κ·Έλ¨
- κ°μ ν΄λμ moduleμ ν΄λΉνλ .py νμΌκ³Ό μ€νν .py νμΌμ μ μ₯ν ν import λ¬Έμ μ¬μ©ν΄ module νΈμΆ
- namespace: νΈμΆ μ λ²μλ₯Ό μ νλ λ°©λ²μΌλ‘ fromκ³Ό importλ₯Ό μ¬μ©(λͺ¨λμλ ν¨μμ ν΄λμ€ λ±μ΄ μ‘΄μ¬ν μ μμ)
Alias μ€μ μ΄ κ°λ₯νκ³ λͺ¨λμμ νΉμ ν¨μ or ν΄λμ€λ λͺ¨λ ν¨μ or ν΄λμ€λ₯Ό νΈμΆ ν μ μλ€.
- built-in module: pythonμ΄ κΈ°λ³ΈμΌλ‘ μ 곡νλ λΌμ΄λΈλ¬λ¦¬λ‘ λ¬Έμ μ²λ¦¬, μΉ, μν λ± λ€μν¨(ex. random, time λ±)
π₯ ν¨ν€μ§(Package): νλμ λν νλ‘μ νΈλ₯Ό λ§λλ μ½λμ λ¬ΆμμΌλ‘ λ€μν λͺ¨λλ€μ ν©, ν΄λλ‘ μ°κ²° λ¨
__init__, __main__λ± ν€μλ νμΌλͺ μ΄ μ¬μ©λ¨.
- νΈμΆλ°©λ²: μλ μ°Έμ‘° - from .render import A -> '.'μ νμ¬ μμΉλ₯Ό λ§ν¨
μ λ μ°Έμ‘° - from game.graphic.render import A
λΆλͺ¨λ₯Ό ν΅ν μ°Έμ‘° - from ..sound.echo import B -> '..' μμ ν΄λλ₯Ό λ§ν¨
- Open sourceλ₯Ό μ¬μ©νκΈ° μν΄ install νλ λ°©λ²μ΄ μμ
-> Anaconda μ¬μ©μ conda install ν¨ν€μ§λͺ
* νλ‘μ νΈλ₯Ό μ§νμ λ§μ κ²½μ° κ°μνκ²½μ λ§λ€μ΄μ€ - λ²μ μ°¨μ΄, νμ ν¨ν€μ§λ±μ κ³ λ €νκΈ° μν¨
-> Anaconda κ°μνκ²½: conda create -n project_name python=3.8
'μΈκ³΅μ§λ₯' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Day 6] Math for AI - 1. numpy (0) | 2021.01.25 |
---|---|
[Day 5] Python (2) | 2021.01.22 |
[Day 3] Python (0) | 2021.01.20 |
[Day 2] Python (0) | 2021.01.19 |
[Day 1] Python (0) | 2021.01.18 |