어떤 인스턴스 클래스의 클래스를 생성하는 가장 편리한 방법은 이 될 수 없으므로 클래스 외부에서이 변경되었습니다 (여전히 값을 얻을 수 있음). 클래스의 메서드 안에 self.var = v
을 호출 할 수는 있지만 ClassObject().var = v
은 클래스 외부에 있지 않습니다.인스턴스 '애트리뷰트를 편집 할 수없는 파이썬 클래스
나는 __setattr__()
을 사용하는 것을 시도했지만,이를 무시한 경우 name
속성을 __init__()
메소드에서 시작할 수 없습니다.
class MyClass(object):
def __init__(self, name):
object.__setattr__(self, "name", name)
def my_method(self):
object.__setattr__(self, "name", self.name + "+")
def __setattr__(self, attr, value):
raise Exception("Usage restricted")
지금이 솔루션이 작동하고, 그것은 충분하지만, 심지어 더 나은 솔루션이 있는지 궁금 해서요 : 유일한 방법 내가 지금 뭐하는 거지하는
__setattr__()
을 무시하고
object.__setattr__()
을 사용하는 것입니다. 이 문제는 다음과 같습니다.
object.__setattr__(MyClass("foo"), "name", "foo_name")
은 수업 외부의 어느 곳에서도 계속 호출 할 수 있습니다.
변수를 클래스 외부에서 설정하는 것을 완전히 막을 수있는 방법이 있습니까?
편집 : 제가 여기 property
찾는 게 아니에요 언급하지 바보, 당신의 일부는 이미 변경 self._name
을 떠날 것이기 때문에, 그러나 그것은 나를 위해 충분하지 않습니다, 그것을 대답했다.
아니, 없다. 어쨌든 순수한 파이썬에서는 아닙니다. 왜 이것을 필요로합니까? –
불가능하지만, 왜 그런 식으로해야 하는지를 묻는 것은 가치가 있습니다. – mgilson
아마도 읽기 전용 속성이 필요합니다. 예를 들어'STEAM_ID'가 좋을 것입니다. –