Python class class 之外的方法

Python classmethod outside the class

我必须使用一些 Python 库,其中包含具有各种实用程序的文件:classes 和方法。这些方法之一是按以下方式定义的(我无法放置整个代码):

@classmethod
def do_something(cls, args=None, **kwargs):

但是这个声明在任何 class 之外。我怎样才能访问这个方法?通过 do_something(myClass) 调用会出现错误:TypeError: 'classmethod' object is not callable。在 classes 之外创建 class 方法的目的是什么?

装饰器生成一个 classmethod 对象。这样的对象是 descriptors(就像 staticmethodproperty 和函数对象)。

也许代码正在重新使用该对象作为这样的描述符。您可以稍后将其添加到 class:

ClassObject.attribute_name = do_something

或者您可以显式调用 descriptor.__get__ method

通过将其存储为全局变量,检索起来更容易;如果你把它放在 class 上,你必须进入 class __dict__ 属性来检索 classmethod 描述符而不调用它:

ClassObject.__dict__['do_something']

因为直接属性访问会导致 Python 为您调用 descriptor.__get_ 方法,返回绑定方法:

>>> class Foo(object):
...     @classmethod
...     def bar(cls):
...         print 'called bar on {}'.format(cls.__name__)
... 
>>> Foo.bar
<bound method type.bar of <class '__main__.Foo'>>
>>> Foo.bar()
called bar on Foo
>>> Foo.__dict__['bar']
<classmethod object at 0x1076b20c0>
>>> Foo.__dict__['bar'].__get__(None, Foo)
<bound method type.bar of <class '__main__.Foo'>>
>>> Foo.__dict__['bar'].__get__(None, Foo)()
called bar on Foo