나는 (클래스 속성에 기본값을 할당하는) 달성하려는 대상이 파이썬 적으로 정확하지 않다고 생각합니다. 왜이 일을 단순히하지 않겠습니까?
class Foo(object):
def __init__(self, a = 'init'):
self.a = a
self.spam = 2
: 그리고 정적 클래스 속성 (두 번째 예)를 통해 그것을 할 경우
>>> a_foo = Foo()
>>> a_foo.spam
2
>>> a_foo.spam = 3
>>> a_foo.spam
3
, 당신은 당신이/액세스 권한을 할당하는 방법에 따라 매우 다른 동작을 얻을 수 그것을 :
다음
class Foo(object):
spam = 2
def __init__(self, a = 'init'):
self.a = a
과 :
>>> a_foo1 = Foo()
>>> a_foo2 = Foo()
>>> a_foo1.spam
2
>>> a_foo2.spam
2
>>> Foo.spam = 3
>>> a_foo1.spam
3
>>> a_foo2.spam
3
# But now they'll diverge
>>> a_foo1.spam = 5
>>> a_foo1.spam
5
>>> a_foo2.spam
3
>>> Foo.spam = 2
>>> a_foo1.spam
5
>>> a_foo2.spam
2
당신은 spam
수정 spam
의 모든인스턴스의 사본의 인스턴스의 사본을 수정하면, 당신은 이런 종류의 비록 정적 속성
class Foo(object):
_spam = 2
def __init__(self, a = 'init'):
self.a = a
@property
def spam(self):
return Foo._spam
@spam.setter
def spam(self, value)
Foo._spam = value
>>> a_foo1 = Foo()
>>> a_foo2 = Foo()
>>> a_foo1.spam
2
>>> a_foo2.spam
2
>>> a_foo1.spam = 3
>>> a_foo2.spam
3
와 결합 된 속성을 사용 거라고 있도록 만들려고 노력하는 경우 singleton-attribute 동작은 다소 위험하며 클래스의 대부분 사용자는 모든 인스턴스의 속성을 수정하기 위해 하나의 인스턴스의 속성을 수정하려고하지 않으므로 일부 사람들은 반 패턴으로 간주 될 수 있습니다. 이런 식으로하는 이유는 분명히 있습니다.
더 명확한 유스 케이스를 제공 할 수 있습니까? 어느 예제도 당신이 달성하기를 원하는 것에 대한 명확한 아이디어를 제공하지 못합니다. 특히, 예제는 당신이'3'을 통과 한 후에 미래의 접근에 대해 매우 다른 행동을합니다. – user2357112
관련 항목 : http://stackoverflow.com/questions/2579840/do-you-use-the-get-set-pattern –