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

jon*_*omo 11 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()
Run Code Online (Sandbox Code Playgroud)

输出是:

type
ObjectOne
Run Code Online (Sandbox Code Playgroud)

我希望输出为:

ObjectOne
ObjectOne
Run Code Online (Sandbox Code Playgroud)

但我想test_cls通过@classmethod装饰器保持作为类方法.

我怎么能做到这一点?

Bre*_*arn 30

classmethod接收类作为其参数.这就是你打电话的原因cls.做吧cls.__name__.


Wil*_*Wil 9

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

__name__ :  gives the program name
__class__.__name__ gives the class name
Run Code Online (Sandbox Code Playgroud)

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

干杯


Mat*_*nen 8

是的cls.__name__.cls已经指向类,现在你得到它的类的名称(总是如此type).

  • `S /总是/通常/`.元类摇滚. (5认同)