2012-12-30 12 views
6

を@classmethod使用して、私は次のコードを持っている:出力されたPythonの - どのように私はクラスメソッド内からクラス名を取得することができます -

class ObjectOne(object): 
    @classmethod 
    def print_class_name(cls): 
     print cls.__class__.__name__ 

    def print_class_name_again(self): 
     print self.__class__.__name__ 

if __name__ == '__main__': 
    obj_one = ObjectOne() 
    obj_one.print_class_name() 
    obj_one.print_class_name_again() 

を:

type 
ObjectOne 

私は出力を希望

ObjectOne 
ObjectOne 

しかし、私は@classmethod decorat経由クラスメソッドとしてtest_clsを維持したいと思います:することがまたは。

どうすればこの問題を解決できますか?

答えて

5

これはcls.__name__です。 clsはすでにクラスを指していますが、という名前のクラス(これは常にtypeです)が取得されています。

+4

's/always /通常/'です。メタクラスの岩。 – delnan

23

classmethodは、その引数としてクラスを受け取ります。だからあなたはそれをclsと呼んでいます。ちょうどcls.__name__をしてください。

関連する問題