Python 버전 2.7.상위 클래스 멤버의 완전히 새로운 인스턴스를 만들 수 있습니까?
시나리오 내가없이 class B
의 인스턴스 x
자신의 복사본을 한을 가지고 __init__
에있는 모든 클래스 멤버 정의를하는 것보다 다른 방법이 있는지 알고 싶습니다 무엇
class A(object):
x = 0
class B(A):
pass
ai = A()
bi = B()
#Then:
id(ai.x) == id(bi.x)
>>> True
class B
에서 다시 정의해야합니까? 아마도 type()
의 트릭이 있습니까?
아직 찾지 못했지만 계속 살펴볼 것입니다. 여기서 답을 찾을 수있는 최적의 장소라고 생각했습니다. 어떤 통찰력이라도 대단히 감사합니다.
편집 : 정말 최고의 예제를 사용하지 않은으로 문법
EDIT2는 명확합니다.
class Y(object):
def __init__(self):
self.z = 0
class A(object):
x = Y()
class B(A):
pass
ai = A()
bi = B()
id(ai.x) == id(bi.x)
>>> True
ai.x.z = 3
id(ai.x) == id(bi.x)
>>> True
이제 문제는 내가
class B
에
x
를 다시 할당하지 않는 것이 발생 그들은
class Y
의 동일한 인스턴스에 모두 포인트 경우에도
class Y
변화의 인스턴스의 멤버.
장고에 익숙하다면 양식이 어떻게 작동하는지 재현하고 있습니다. 나는 폼에 대해 metaclass
과 함께 가고 새로운 인스턴스가 생성 될 때마다 필드의 사전을 구축하기로 결정하지 않았다. 어쩌면 metaclass
을 사용하여 전환해야 할 것이다.
세 번째를 편집하십시오. 저는 통역관에게 지금 요청하고있는 불가능 성을 깨닫고 있습니다. 클래스의 인스턴스를 멤버에게 할당하면 상속 된 클래스가 해당 클래스의 새 인스턴스를 만드는 방법을 알 수 없습니다. 따라서 내 문제는 메타 솔루션이 유일한 해결책 인 것 같습니다.