Python에서는 속성 및 메서드와 같은 클래스 멤버에 대한 액세스 제어가 Java 또는 C#과 같은 언어와 다르게 처리됩니다. Python의 철학은 "여기서 우리는 모두 동의하는 성인입니다"라는 지침을 따르며, 이는 클래스 사용자가 내부 규칙을 준수해야 하며 꼭 필요한 경우가 아니면 개인 데이터에 액세스하거나 수정하지 않아야 함을 의미합니다. 그러나 Python은 다른 언어보다 덜 엄격한 방식이기는 하지만 액세스 제어를 표시하고 시행하는 몇 가지 메커니즘을 제공합니다.
공개 회원:
class MyClass:
def __init__(self):
self.public_attribute = "This is a public attribute"
obj = MyClass()
print(obj.public_attribute) # Accessible
class MyClass:
def __init__(self):
self._protected_attribute = "This is a protected attribute"
class SubClass(MyClass):
def __init__(self):
super().__init__()
print(self._protected_attribute) # Accessible within a subclass
obj = MyClass()
print(obj._protected_attribute) # Still accessible, but not recommended
__ 접두사로 표시됩니다.class MyClass:
def __init__(self):
self.__private_attribute = "This is a private attribute"
def get_private_attribute(self):
return self.__private_attribute
obj = MyClass()
print(obj.get_private_attribute()) # Accessible via a public method
# print(obj.__private_attribute) # Will raise an AttributeError
property 데코레이터를 사용하면 getter, setter 및 deleter를 우아한 방식으로 정의할 수 있습니다.lass MyClass:
def __init__(self):
self.__private_attribute = "This is a private attribute"
@property
def private_attribute(self):
return self.__private_attribute
@private_attribute.setter
def private_attribute(self, value):
self.__private_attribute = value
obj = MyClass()
print(obj.private_attribute) # Accessible via getter
obj.private_attribute = "New Value" # Accessible via setter
Python은 액세스 제어에 대한 규칙(속성 이름 앞에 밑줄을 붙이는 것과 같은)을 제공하지만 엄격한 적용보다는 책임 있는 사용에 더 의존합니다. 이 접근 방식은 유연성을 제공하지만 이러한 액세스 제어 규칙을 준수하려면 개발자의 규율이 필요합니다.