π ν΄λμ€ λ³μ(Class Variable)μ μΈμ€ν΄μ€ λ³μ(Instance Variable)
- ν΄λμ€ λ³μ : ν΄λμ€κ° 곡μ νλ λ³μ (λͺ¨λ κ°μ²΄κ° κ°μ κ°μ κ°μ§)
- μΈμ€ν΄μ€ λ³μ : κ°μ²΄λ§λ€ λ 립μ μΌλ‘ κ°μ§λ λ³μ
class Person:
# ν΄λμ€ λ³μ
species = "Human"
def __init__(self, alias):
# μΈμ€ν΄μ€ λ³μ
self.alias = name
p = Person("Tom")
print(Person.species) #Human (ν΄λμ€ λ³μ)
print(p.species) # Human (ν΄λμ€ λ³μ)
print(p.alias) # Tom (μΈμ€ν΄μ€ λ³μ)
Person.species = "Changed" # ν΄λμ€ λ³μ λ³κ²½
p.alias = "Tony" # μΈμ€ν΄μ€ λ³μ
print(Person.species) # Changed (ν΄λμ€ λ³μ)
print(p.species) # Changed (ν΄λμ€ λ³μ)
print(p.alias) # Tony (μΈμ€ν΄μ€ λ³μ)
ν΄λμ€ λ³μλ JAVAμμ static λ³μ κ°μ λμμΌλ‘ λͺ¨λ μΈμ€ν΄μ€κ° 곡μ λλ€.
μ½λμμ 보면 Person.species = "Changed"λ©΄ p κ°μ²΄μ species κ°λ λ³κ²½λκ² λλ€.
μΈμ€ν΄μ€ λ³μλ κ°μ²΄λ§λ€ λ 립μ μΈ κ°μ κ°μ§λ―λ‘, Person.* μΈμ€ν΄μ€ λ³μλ μ κ·Όν μ μλ€.
p = Person("Tom")
print(Person.species)
print(p.species) # Human (ν΄λμ€ λ³μ)
p.species = "Changed" # p κ°μ²΄μ ν΄λμ€ λ³μ λ³κ²½
print(Person.species) # Personμ ν΄λμ€ λ³μ
print(p.species) # p κ°μ²΄μ ν΄λμ€ λ³μ
ν΄λμ€ μ체λ₯Ό μ κ·Όνλκ² μλ μμ±λμ΄ μλ ν΄λμ€ κ°μ²΄μ ν΄λμ€ λ³μλ₯Ό μ κ·Όνκ² λλ€λ©΄,
ν΄λμ€ λ³μκ° λ³κ²½λλ κ²μ΄ μλλΌ pκ°μ²΄μ μΈμ€ν΄μ€ species λ³μλ₯Ό μμ±νκ² λλ€.
κ·Έλμ p.species λ³μλ₯Ό μΆλ ₯νμ λλ§ λ³κ²½λ κ°μ΄ λμ€κ² λ¨.
π @classmethod λ°μ½λ μ΄ν° νμ©
class Person:
# ν΄λμ€ λ³μ
species = "Human"
@classmethod
def set_species(cls, new_value):
cls.species = new_value
print(Person.species) # ν΄λμ€ λ³μ
Person.set_species("Changed") # ν΄λμ€ λ©μλ
print(Person.species) # λ³κ²½λ ν΄λμ€ λ³μ : Changed
π μ κ·Ό μ§μ μ (Public, Protected, Private)
Pythonμλ μ κ·Ό μ§μ μκ° μλ€.
λμ , λ³μ μ΄λ¦ μμ μΈλμ€μ½μ΄(_)λ₯Ό λΆμ¬ μ κ·Ό μ ν μλλ₯Ό ννν μ μλ€.
Public | alias | λ΄μΈλΆ μ κ·Ό κ°λ₯ |
Protected | _alias | λ΄μΈλΆ μ κ·Ό κ°λ₯ but, μ§μνλΌκ³ μλ―Έλ₯Ό νν |
Private | __alias | μΈλΆ μ κ·Ό λΆκ°λ₯ λ΄λΆμμλ§ μ κ·Ό κ°λ₯ |
class Sample:
def __init__(self):
self.public_var = "곡κ°"
self._protected_var = "보νΈ"
self.__private_var = "λΉκ³΅κ°"
obj = Sample()
print(obj.public_var) # κ°λ₯
print(obj._protected_var) # κ°λ₯νμ§λ§ κΆμ₯ X
# print(obj.__private_var) # μλ¬ (μ§μ μ κ·Ό λΆκ°)
μ¬μ€ __private_varλ μ κ·Όνλ €κ³ νλ©΄ μ κ·Όμ΄ κ°λ₯νλ€.
λ³μλͺ
μμ "_{Class_Name}"μ λΆμ΄λ©΄ λλλ° __private_varμ κ²½μ°λ _Sample__private_varλ‘ μ κ·Ό κ°λ₯νλ€.
νμ§λ§ μλ‘ λ΄λΆ λ³μλ‘ μ κ·Όνμ§ λ§μκ³ μ½μν κ²μ΄κΈ°λλ¬Έμ μ κ·Όνλ μ½λλ₯Ό μμ±νλ©΄ μλ¨.
ν΄λμ€ λ³μλ₯Ό μ§μ μμ νλ κ²μ λ§κ³ , λ©μλλ₯Ό ν΅ν΄ μ κ·Όνκ² νλ ννλ‘ getter, setter κΈ°λ₯μ ꡬνν΄μΌνλ€. (μΊ‘μν)
# Getter
def get_private_var(self):
return self.__private_var
# Setter
def set_private_var(self, new_private_var):
if len(new_private_var) > 1: # μ ν¨μ± κ²μ¬
self.__private_var = new_private_var
else:
print("ν κΈμ μ΄μμ΄μ΄μΌ ν©λλ€!")
π @property λ°μ½λ μ΄ν° νμ© (Pythonic Way β¨)
Pythonμμ Getter/Setter λ©μλ λμ @property λ°μ½λ μ΄ν°λ₯Ό μ΄μ©νλ νΈ.
class Sample:
def __init__(self):
self.__private_var = "λΉκ³΅κ°"
@property
def private_var(self): # Getter
return self.__private_var
@private_var.setter
def private_var(self, new_private_var): # Setter
if len(new_private_var) > 1:
self.__private_var = new_private_var
else:
print("ν κΈμ μ΄μμ΄μ΄μΌ ν©λλ€!")
obj = Sample()
print(obj.private_var) # λΉκ³΅κ°
obj.private_var = "μλ‘μ΄ λ³΄μ"
print(obj.private_var) # μλ‘μ΄ λ³΄μ
'AI > Python' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Python] datetime λͺ¨λ (0) | 2025.09.25 |
---|---|
[Python] ascii code <-> string λ³ν λ°©λ² (0) | 2025.09.10 |
[Python] μ λ ₯λ°©λ² input(), sys.stdin.readline(), strip() (0) | 2025.09.09 |
[Python] λͺ¨λ λ§λ€κΈ° (0) | 2025.09.05 |
[Python] NumPy listμ Python list μ°¨μ΄ (0) | 2025.09.04 |