2013-07-15 84 views
6

問題很簡單,我試圖使縮進適合可讀性。我剛開始用Python和這裏是我現在有:在python中動態獲取類級別變量的類名稱

class BaseKlass(): 
    .... 

class DerivedKlass1(BaseKlass): 
    display_name = "DerivedKlass1" 

class DerivedKlass2(BaseKlass): 
    display_name = "DerivedKlass2" 

所以基本上所有派生類與類名的硬編碼

DISPLAY_NAME變量。

我要的是有在BaseKlass DISPLAY_NAME集,並從子類中刪除DISPLAY_NAME聲明如下:

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

class DerivedKlass1(BaseKlass): 
    .... 

class DerivedKlass2(BaseKlass): 
    .... 

這樣DerivedKlass1.display_name應該返回「DerivedKlass1」和DerivedKlass2.display_name應該返回「DerivedKlass2」。

我知道我錯過了一些非常明顯的東西,我期待着很多RTFM評論,但不管我想要的是學習如何動態地將python類名設置爲類級屬性。所以,如果你願意,可以自由投票,但如果你也留下了答案,我會很感激。

感謝,

回答

5

您可以

obj.__class__.__name__ 

訪問對象的類名你需要這樣做,一旦實例已創建壽。最直接的方法是

class MyClass: 

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

你也很可能使用一元類,系統將自動設置,但我不覺得這是值得的麻煩,加上我怎麼也想不起這些工作究竟馬上。

+0

是的,它工作:)。感謝@astrognocci。 – splintercell