2013-07-15 7 views
6

にクラスレベルの変数でクラス名を取得します。私はただのPythonでの起動と、ここで私が今持っているものですしています:は動的質問は簡単ですし、私は読みやすくするためにインデントが適切に作成しようとしたのpython

class BaseKlass(): 
    .... 

class DerivedKlass1(BaseKlass): 
    display_name = "DerivedKlass1" 

class DerivedKlass2(BaseKlass): 
    display_name = "DerivedKlass2" 

だから、基本的にすべての派生クラスは、ハードコードされたクラス名を持つ

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を返す必要があり、次のように私が欲しいもの

はBaseKlassでDISPLAY_NAMEセットを持っているし、子クラスからDISPLAY_NAME宣言を削除することです"DerivedKlass2"を返します。

私は非常に何かを明らかに不足していると私はRTFMコメントの多くを期待しています知っているが、関係なく、私が望むすべては、動的にクラスレベルの属性にPythonのクラス名を設定する方法を学ぶことです。だから、あなたがしたい場合は下のポストを投票すること自由に感じていますが、同様の答えを残す場合、私は感謝してます。

おかげで、

答えて

5

あなたは、インスタンスがカントーに作成された後あなたがそうする必要があります

obj.__class__.__name__ 

で、オブジェクトのクラス名にアクセスすることができます。あなたはまた、おそらく、それが自動的に設定されているためにメタクラスを使用することができ

class MyClass: 

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

ほとんどまっすぐ進む方法があることだろうが、私はそれがトラブルの価値があるだろうとは思わない、プラス私はどのようにそれらの作業を正確に思い出すことができませんたった今。

+0

うん、それは:)動作します。ありがとう@astrognocci。 – splintercell

関連する問題