2011-01-29 4 views
19

파이썬에서 인스턴스의 __class__ 속성을 어떤 상황에서 할당 할 수 있습니까?파이썬에서 인스턴스의 __class__ 속성에 할당하기

TypeError: __class__ assignment: only for heap types과 같은 오류 메시지는 실제로 나를 위해 그것을하지 않습니다.

+6

@Rafe : 실제로 장고는 인증 코드 –

+2

에서 파티에 늦게이 트릭을 사용하지만 matplotlib도 프로덕션 코드에서이 작업을 수행합니다 (일부 3D 플로팅에서). – tacaswell

답변

13

사용자 정의 클래스의 인스턴스 (예 : class 키워드로 정의)의 __class__ 속성에만 할당 할 수 있으며 새 값은 사용자 정의 클래스 여야합니다. 클래스가 새로운 스타일인지 오래된 스타일인지는 중요하지 않습니다. (당신은 그것들을 혼합 할 수 없다. 구식 클래스 인스턴스를 새로운 스타일의 클래스 인스턴스로 바꿀 수는 없다.) 또한 파이썬 버그 추적기에서 this issue을 참조하라. 또한 오류 메시지가 다소 어렵다고 불평한다. 알다.

위의 의견에 Rafe가 말한 내용을 추가하기 만하면 : 에서 절대 수행하지 마십시오.

+3

또한, 내 실험에서 그것은'__slots__ '의 존재/부재가 차이를 만듭니다 : "X deallocator는 Y와"instance_with_slots .__ class__ = ClassWithoutSlots' 및'instance_without_slots .__ class__ = ClassWithSlots' – delnan

+1

아, 나는 왜냐하면 분명히'a .__ class__ = B'를 수행 했어야했기 때문에'a .__ class__ = B .__ class__'을했기 때문입니다. – porgarmingduod

+1

http://www.mail-archive.com/[email protected]/msg52950을 참조하십시오. 문제를 일으킬 수있는 타입 간의 차이점에 대한 목록은 – jimifiki

관련 문제