27

次のコードがあります。

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

しかし、デコレータtest_clsを介してクラスメソッドとして保持したいと思います。@classmethod

どうすればこれを達成できますか?

4

3 に答える 3

40

クラスメソッドはクラスを引数として受け取ります。それがあなたがそれを呼んでいる理由ですcls。するだけですcls.__name__

于 2012-12-30T21:46:18.003 に答える
12

ですcls.__name__clsはすでにクラスを指しており、そのクラスの名前を取得しています (これは常にtypeです)。

于 2012-12-30T21:45:58.780 に答える