gpt4 book ai didi

类外的Python classmethod

转载 作者:行者123 更新时间:2023-12-04 13:48:04 26 4
gpt4 key购买 nike

我必须使用一些 Python 库,其中包含具有各种实用程序的文件:类和方法。其中一种方法以下列方式定义(我不能放完整代码):

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

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

最佳答案

装饰器产生一个 classmethod目的。此类对象是 descriptors (就像 staticmethodproperty 和函数对象)。
也许代码正在重新使用该对象作为这样的描述符。您可以稍后将其添加到类中:

ClassObject.attribute_name = do_something
或者您可以显式调用 descriptor.__get__ method .
通过将其存储为全局,更容易检索;如果你把它放在类里面,你必须进入类 __dict__属性来检索 classmethod描述符而不调用它:
ClassObject.__dict__['do_something']
因为直接访问属性会导致 Python 调用 descriptor.__get_方法,返回绑定(bind)方法:
>>> 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

关于类外的Python classmethod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32284275/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com