2011-01-29 17 views
19

Hangi koşullar altında ve mümkün olmadığında, bir örneğe Python'da __class__ özniteliği atamak mümkün mü?Python'da bir örneğin __class__ özniteliğine atama

TypeError: __class__ assignment: only for heap types gibi hata iletileri gerçekten benim için yapmaz.

+6

@Rafe: Django, bu hileyi tarafa geçerek kimlik doğrulama kodu –

+2

'da kullanıyor, ancak matplotlib bunu üretim kodunda da yapıyor (bazı 3D çizimlerinde). – tacaswell

cevap

13

Yalnızca kullanıcı tanımlı bir sınıfın (yani, class anahtar sözcüğü kullanılarak tanımlanmış) bir örneğinin __class__ özniteliğine atayabilir ve yeni değerin de kullanıcı tanımlı bir sınıf olması gerekir. Sınıfların yeni tarz mı yoksa eski tarz mı olduğu önemli değil. (Ancak, bunları karıştıramazsınız. Eski stil sınıfı örneğini yeni bir stil sınıf örneğine dönüştürebilirsiniz.) Ayrıca, Python hata izleyicisinde this issue'a da bakın, bu da hata iletisinin biraz zor olduğundan şikayet eder. anlama.

Yukarıdaki yorumda Rafe'in ne söylediğini eklemek için: Bunu üretimde asla yapmayın.

+3

Ayrıca, denemeden '__slots__' varlığının/yokluğunun da bir fark yarattığı görülüyor: "X deallocator, Y'den farklıdır", "instance_with_slots .__ class__ = ClassWithoutSlots" ve "instance_without_slots .__ class__ = ClassWithSlots" – delnan

+1

Ah, 'a .__ class__ = B .__ class__' yaptım çünkü kafam karıştı' a .__ class__ = B ' – porgarmingduod

+1

' 'http://www.mail-archive.com/[email protected]/msg52950 adresine bakın. – jimifiki