2013-07-15 22 views
6

Soru basittir ve girinti için okunabilirliği doğru yapmaya çalıştım. Burada sadece Python ile başlangıç ​​ve am ben şimdi ne var: Python'da sınıf düzeyi değişkeninde dinamik olarak sınıf adı alın

class BaseKlass(): 
    .... 

class DerivedKlass1(BaseKlass): 
    display_name = "DerivedKlass1" 

class DerivedKlass2(BaseKlass): 
    display_name = "DerivedKlass2" 

Yani temelde tüm türetilmiş sınıfları kodlanmış sınıf adıyla

display_name değişken içeriyor.

class BaseKlass(): 
    display_name = <some way to set the display name to callee class name> 

class DerivedKlass1(BaseKlass): 
    .... 

class DerivedKlass2(BaseKlass): 
    .... 

Yani bu DerivedKlass1.display_name "DerivedKlass1" ve DerivedKlass2.display_name dönmelidir şu şekildedir: Benim istediğim

BaseKlass içinde display_name dizi var ve çocuk sınıflardan display_name beyanı kaldırmaktır "DerivedKlass2" döndürmelidir.

Çok belirgin bir şeyi kaçırdığımı biliyorum ve çok fazla RTFM yorumu bekliyorum ancak tek istediğim python sınıfının adını bir sınıf düzeyi özniteliğine dinamik olarak nasıl ayarlayacağımı öğrenmek. Bu yüzden eğer isterseniz bir oylama yapmaktan çekinmeyin, ama bir cevabı da bıraktığınızda müteşekkir olacağım.

sayesinde

cevap

5

Sen

obj.__class__.__name__ 

ile bir nesnenin sınıf adı erişebilir Sen örneği tho oluşturulduktan sonra bunu gerekir. Ayrıca muhtemelen otomatik olarak ayarlanır için bir metaclass kullanabilirsiniz

class MyClass: 

    def __init__(self): 
     self.display_name = self.__class__.__name__ 

en düz yol olurdu, ama sorun değerinde sanmıyorum artı ı nasıl bu işi tam olarak hatırlayamıyorum şimdi.

+0

Evet, işe yarar :). teşekkürler @astrognocci. – splintercell