2016-08-24 14 views
2

Pythonでは、「静的コンストラクタ」にクラス名を取得する方法はありますか?私は継承されたクラスメソッドを使用してクラス変数を初期化したいと思います。クラス変数のPython静的継承

class A(): 
    @classmethod 
    def _getInit(cls): 
     return 'Hello ' + cls.__name__ 

class B(A): 
    staticField = B._getInit() 

NameError: name 'B' is not defined

答えて

6

Bがフルclassスイートが実行されたとクラスオブジェクトが作成されるまでに割り当てられていない名前。同じ理由で、クラスオブジェクトが作成されるまで、クラスの__name__属性は設定されません。

あなたはその後、その属性を割り当てる必要があるだろう:

class A(): 
    @classmethod 
    def _getInit(cls): 
     return 'Hello ' + cls.__name__ 

class B(A): 
    pass 

B.staticField = B._getInit() 

代替が(新たに作成されたクラスオブジェクトを渡される)クラスのデコレータを使用するか、クラスオブジェクトを作成し、メタクラスを(使用することです最初に使用する名前が与えられています)。