Python - 如何从类方法中获取类名 - 使用@classmethod

时间:2012-12-30 21:44:10

标签: python class-method

我有以下代码:

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作为类方法。

我该如何做到这一点?

3 个答案:

答案 0 :(得分:27)

classmethod接收类作为其参数。这就是你称之为cls的原因。只需cls.__name__

答案 1 :(得分:7)

这是cls.__name__cls已经指向该类,现在您将获得类的名称(始终为type)。

答案 2 :(得分:0)

我有一个类似的问题,并且想要获取日志记录的类名和函数/方法名。

__name__ :  gives the program name
__class__.__name__ gives the class name

inspect.stack()[0] [3]给出模块名称。 (您必须导入检查)。

欢呼