μ§λ κ°μμμ λ°°μ λ―μ΄ νμ΄μ¬μ ν΄λμ€ κ΄μ μμ μΈλμ€μ½μ΄(_)κ° λκ° λΆμ΄μμΌλ©΄ privateν λ³μλ€.
privateν λ³μμ λν΄μ λ΄λΆμ ννμ μ¨κΈ°κ³ μΈλΆμμ λ€μ΄λκ² ν λ(μΊ‘μν), ν΄λΉ λ³μλ₯Ό μ½κ±°λ μμ νλ €λ©΄ λ©μλλ₯Ό νμ©ν΄μΌνλ€.
κ·ΈλΌμλ μ§μ μ κ·Όν μ μλ λ°©λ²μ μκΈ°μ @Property annotationμ΄ μ‘΄μ¬νλ€.
μ§λ μκ°μ μ§°λ 볡μ‘ν μ½λλ₯Ό λμ± κ°λ¨νκ² κ΅¬νν μ μκ² λλ€.
1. pythonicν μ½λλ‘ μμ±κ°λ₯νλ€.
λ€λ₯Έ μΈμ΄μ μ°¨λ³λκ² κ°λ¨ν λ¬Έλ²μ΄ νμ΄μ¬μ λ 보μ μΈ μ₯μ μ΄λ€.
μ΄λ₯Ό νμ©νλ κ²μ΄ νμ΄μ¬μ μ λλ‘ μ΄μ©νλ€κ³ λ³Ό μ μλ€.2. λ³μμ μ μ½μ μ€μ ν μ μλ€.
(ex) μμ΄λ§ ν λΉν λ³μ , μ«μλ§ λ°μ λ³μ
- μλν λλ‘ νλ‘κ·Έλ¨μ΄ λμν μ μλλ‘ ν΄μ μ‘°κΈ λ κ²¬κ³ νκ² λμκ°λ₯νλ€.
3. getter, setter ν¨κ³Όκ° λλ±νλ€.
- μ½λμ μΌκ΄μ±μ΄ μκΈ΄λ€.
- μΊ‘μν, μ ν¨μ± κ²μ¬, κΈ°λ₯ μΆκ° μ©μ΄
- μμ± λ ΈμΆ, λ΄λΆ νν μ¨κΈ°κΈ° κ°λ₯
- βοΈ (κ°μ₯ μ€μ) μμ±μ μλͺ λ° λ©λͺ¨λ¦¬ κ΄λ¦¬ μ©μ΄
- ν΄λμ€μ λ νΌλ°μ€ μ£Όμλ§ μμ΄μ§λ©΄, λ³μλ€μ΄ μμμ ν΄λμ€μ ν¨κ» μ¬λΌμ§
- λλ²κΉ μ©μ΄
- getter,setterλ₯Ό μ¬μ©νλ λΌμ΄λΈλ¬λ¦¬κ° λ§λ€.
λ°λΌμ μνΈμ΄μ©μ±μ΄ μ’μμ§λ€. (django κ°μ μ€νμμ€)
class SampleB:
def __init__(self):
self.x = 0
self.__y = 0
def get_y(self):
return self.__y
def set_y(self,value):
self.__y = value
class SampleA:
def __init__(self):
self.x = 0
self.__y = 0 #private
# λ°λ‘ λ©μλλ₯Ό νΈμΆνμ§ μμλ μμμ νμν μμ μ λμνλ€.
@property
def y(self):
print('Called get method.')
return self.__y
@y.setter
def y(self,value):
print('Called set method.')
self.__y = value
@y.deleter
def y(self):
print('Called delete method.')
del self.__y
a = SampleA()
a.x = 1
a.y = 2 # setterκ° λμνλ€.
print('ex 1> x : {}'.format(a.x))
print('ex 1> y : {}'.format(a.y)) # getter λμ
# deleter
del a.y
print('ex 1> dir : {}'.format(dir(a)))
#[ _SampleA__y , ... , 'x', 'y']
del a.y
print('ex 1> dir : {}'.format(dir(a)))
# [ ... , 'x', 'y']
class SampleB:
def __init__(self):
self.x = 0
self.__y = 0 #private
@property
def y(self):
return self.__y
@y.setter
def y(self,value):
if value < 0:
raise ValueError('0 λ³΄λ€ ν° κ°μ μ
λ ₯νμΈμ')
self.__y = value
@y.deleter
def y(self):
del self.__y
b = SampleB()
b.x = 1
b.y = 10
print('ex 2> x : {}'.format(b.x))
print('ex 2> y : {}'.format(b.y))
b.y = -5
#μμΈ λ°μ ValueError: 0 λ³΄λ€ ν° κ°μ μ
λ ₯νμΈμ
μ 리
private λ³μ : __IamPrivate
#getter @property def IamPrivate(self): return self.__IamPrivate
#setter @IamPrivate.setter def IamPrivate(self,value): if [value μ μ½ μ‘°κ±΄]: (μλ¬ μ²λ¦¬) self.__IamPrivate = value
#deleter for memory @IamPrivate.deleter def IamPrivate(self): del self.__IamPrivate