2010-07-23 29 views
19

Bir alt sınıfın ismini almak mümkün mü? Örneğin:Alt sınıf adı al?

class Foo: 
    def bar(self): 
     print type(self) 

class SubFoo(Foo): 
    pass 

SubFoo().bar() 

yazdırır: Ben "SubFoo" almak için bir yol arıyorum < type 'instance' >

.

Sana isinstance yapabileceğini biliyorum, ama bu benim için çalışmıyor bu yüzden, sınıf önsel adını bilmiyorum. Yeni tarzı sınıfları kullandığınızda

+0

.. en azından kullanabilirsiniz 'issubclass (SubFoo Foo)' – mykhal

cevap

8
#!/usr/bin/python 
class Foo(object): 
    def bar(self): 
    print type(self) 

class SubFoo(Foo): 
    pass 

SubFoo().bar() 

object gelen Subclassing yeni tarzı sınıfları verir (verir çünkü, konu dışı olabilir

SubFoo().__class__.__name__ 

Daha fazla yeni olmayanlar - python 2.2!) Eğer öznitelik ile çalışmak istediğiniz her zaman çok fazla nesne için alt sınıftan daha fazla para kazanacaksınız. Python'un belgeleri ... new style classes. Tarihsel olarak Python, geriye dönük uyumluluk için eski tarz Foo()'u terk etti. Ama bu uzun zaman önceydi. Nesneden alt sınıflara ayrılmamak için pek fazla sebep yok.

+0

Ve 'Foo()', Python'un eski yeterli sürümlerinde çalışmaz. –

3

Çok daha iyi çalışır.

class Foo(object): 
    .... 
13

kullanabileceğiniz size bir sınıf adı :)

+0

@ars tam olarak – mykhal

+0

Hata, üzgünüm. Haklısın, kötüyüm. – ars

1

SubFoo.__name__

Ve veliler: [cls.__name__ for cls in SubFoo.__bases__]