질문 : 파이썬은 클래스에 "개인"변수를 가지고 있습니까?
저는 자바 세계에서 왔고 Bruce Eckels의 Python 3 Patterns, Recipes and Idioms를 읽고 있습니다.
클래스에 대해 읽는 동안 파이썬에서는 인스턴스 변수를 선언 할 필요가 없다고 계속해서 말합니다. 생성자에서 사용하기 만하면됩니다.
예를 들면 :
class Simple:
def __init__(self, s):
print("inside the simple constructor")
self.s = s
def show(self):
print(self.s)
def showMsg(self, msg):
print(msg + ':', self.show())
Simple
클래스의 모든 객체는 클래스 외부에서 s
의 값을 변경할 수 있습니다.
예를 들면 :
if __name__ == "__main__":
x = Simple("constructor argument")
x.s = "test15" # this changes the value
x.show()
x.showMsg("A message")
Java에서 우리는 public / private / protected 변수에 대해 배웠습니다. 이러한 키워드는 때때로 클래스 외부의 아무도 액세스 할 수없는 클래스의 변수를 원하기 때문에 의미가 있습니다.
파이썬에서 왜 필요하지 않습니까?
답변
문화적입니다. Python에서는 다른 클래스의 인스턴스 또는 클래스 변수에 쓰지 않습니다. Java에서는 실제로 원하는 경우 동일한 작업을 수행하는 것을 방해하지 않습니다. 결국 동일한 효과를 얻기 위해 항상 클래스 자체의 소스를 편집 할 수 있습니다. 파이썬은 그러한 보안을 무시하고 프로그래머가 책임을 지도록 권장합니다. 실제로 이것은 매우 잘 작동합니다.
어떤 이유로 개인용 변수를 에뮬레이트하려면 항상 PEP 8 __
접두사를 사용할 수 있습니다. 파이썬은 같은 변수의 이름을 엉망으로 __foo
그들은 당신이에서 작업하는 경우 당신은 자바의 보호를 주위에 얻을 수있는 것처럼,있는 거 결정 충분 당신에게 경우에 당신이 그것을 주위를 얻을 수 있지만 (이를 포함하는 클래스 외부의 코드에서 쉽게 볼 수없는 걸 너무 그것).
동일한 규칙에 따라 _
접두사는 기술적으로 금지되지 않은 경우에도 멀리 떨어져 있음을 의미합니다. __foo
또는 _bar와 같은 다른 클래스의 변수를 가지고 _bar
.
출처 : https://stackoverflow.com/questions/1641219/does-python-have-private-variables-in-classes
'프로그래밍 언어 > Python' 카테고리의 다른 글
파이썬에서 문자열 'contains' 메서드를 사용하는 방법 (0) | 2021.09.28 |
---|---|
Python의 re.compile가 필요한 이유 (0) | 2021.09.27 |
파이썬에서 "named tuples" 이란? (0) | 2021.09.15 |
Python Interpreter에서 업데이트 된 패키지를 다시 가져 오는 방법 (0) | 2021.09.15 |
파이썬 'for' 루프를 사용하여 딕셔너리 반복 (0) | 2021.09.14 |