객체 지향 프로그래밍 언어인 Python은 클래스 내에서 데이터를 캡슐화하는 다양한 방법을 제공합니다.
이 캡슐화의 주요 측면 중 하나는 공개, 보호 및 비공개로 분류될 수 있는 클래스 변수의 가시성입니다. 이 기사에서는 Python 클래스에서 공개, 비공개 및 보호 변수를 정의하는 방법을 살펴보겠습니다.
이러한 변수의 동작은 다른 프로그래밍 언어와는 전혀 다릅니다. 이러한 액세스 제어는 실제로 객체를 숨기는 것이 아니라 Python의 명명 규칙일 뿐입니다.
공개 변수는 가장 접근하기 쉬운 변수 유형입니다. 수업 내부와 외부 어디에서나 액세스할 수 있습니다. Python에서는 별도로 명시적으로 정의하지 않는 한 모든 클래스 변수가 기본적으로 공개됩니다.
예:
class MyClass: def __init__(self, name): self.name = name # Public variable obj = MyClass("John") print(obj.name) # Accessible outside the class #Output : John
이 예에서 name은 공개 변수입니다. 수업 외부에서도 아무런 제한 없이 접근 및 수정이 가능합니다.
보호된 변수는 클래스와 해당 하위 클래스 내에서만 액세스할 수 있습니다. Python은 엄격한 액세스 제어를 시행하지 않지만 변수가 보호된다는 것을 나타내는 규칙은 이름 앞에 단일 밑줄(_)을 붙이는 것입니다.
예:
class MyClass: def __init__(self, name, age): self._age = age # Protected variable class ChildClass(MyClass): def display(self): print(f"Age: {self._age}") # Accessible within a subclass obj = ChildClass("John", 30) obj.display() # Output: Age: 30
이 예에서 age는 보호되는 변수입니다. Python은 클래스 외부에서 직접 액세스하는 것을 방지하지 않지만 그렇게 하면 의도한 사용법에 어긋납니다.
개인 변수는 해당 변수를 정의하는 클래스 내에서만 액세스할 수 있습니다. Python은 변수 이름 앞에 이중 밑줄(__)을 붙여서 개인 변수를 나타냅니다. 이로 인해 이름 맹글링이 발생하여 클래스 외부에서 개인 변수에 액세스하기가 더 어려워집니다(불가능하지는 않음).
예:
class MyClass: def __init__(self, name, age, salary): self.__salary = salary # Private variable def display_salary(self): print(f"Salary: {self.__salary}") # Accessible within the class obj = MyClass("John", 30, 50000) obj.display_salary() # Output: Salary: 50000 # Trying to access the private variable outside the class print(obj.__salary) # Raises AttributeError
이 예에서 급여는 비공개 변수입니다. 클래스 외부에서 직접 액세스하려고 하면 Python은 AttributeError를 발생시킵니다. 그러나 이름이 변경된 버전을 사용하여 액세스할 수는 있지만 이는 권장되지 않습니다.
이름 맹글링의 예:
print(obj._MyClass__salary) # Output: 50000
이 코드 줄은 클래스 이름을 포함하도록 비공개 변수의 이름을 내부적으로 변경하여 액세스하기 어렵게 만드는 방법을 보여줍니다.
Python의 액세스 제어는 엄격한 적용보다는 명명 규칙을 기반으로 하지만 이러한 규칙을 따르면 코드 명확성과 무결성을 유지하는 데 도움이 됩니다. 공개, 보호 및 비공개 변수를 정의하고 사용하는 방법을 이해하는 것은 Python에서 효과적인 객체 지향 프로그래밍에 매우 중요합니다.
위 내용은 Python - 클래스에서 공개, 비공개 및 보호 변수를 정의하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!