如何从Python中的静态方法获取(子)类名?

Jea*_*vel 28 python reflection static-methods function-call

如果我定义:

class Bar(object):

    @staticmethod
    def bar():
        # code
        pass

class Foo(Bar):
    # code
    pass
Run Code Online (Sandbox Code Playgroud)

函数调用Foo.bar()是否可以确定类名Foo?

Dav*_*rby 34

用classmethod替换static方法.这将在调用时传递给类,因此您可以从中获取类名.

class Bar(object):

    @classmethod
    def bar(cls):
        # code
        print cls.__name__

class Foo(Bar):
    # code
    pass

>>> Bar.bar()
Bar

>>> Foo.bar()
Foo
Run Code Online (Sandbox Code Playgroud)

  • 这不回答这个问题.问题是如何使用静态方法. (8认同)
  • `classmethods` 是“静态”方法,它们无法访问需要 `self` 参数的对象,`cls` 只能访问类而不是对象实例。不同的是`classmethod`可以修改Class本身的状态@sebix (2认同)