gpt4 book ai didi

python - 有什么方法可以创建不污染其实例的属性命名空间的 Python 类方法吗?

转载 作者:太空狗 更新时间:2023-10-30 01:53:19 26 4
gpt4 key购买 nike

我想提供一种可以在 Python 2.7 类对象上使用的方法,但不会污染其实例的属性命名空间。有什么办法吗?

>>> class Foo(object):
... @classmethod
... def ugh(cls):
... return 33
...
>>> Foo.ugh()
33
>>> foo = Foo()
>>> foo.ugh()
33

最佳答案

您可以子类化类方法描述符:

class classonly(classmethod):
def __get__(self, obj, type):
if obj: raise AttributeError
return super(classonly, self).__get__(obj, type)

这是它的行为方式:

class C(object):
@classonly
def foo(cls):
return 42
>>> C.foo()
42
>>> c=C()
>>> c.foo()
AttributeError

这对描述符调用进行了脱糖(相反,它由 __getattribute__ 的默认实现调用):

>>> C.__dict__['foo'].__get__(None, C)
<bound method C.foo of <class '__main__.C'>>
>>> C.__dict__['foo'].__get__(c, type(c))
AttributeError

必读:Data Model — Implementing DescriptorsDescriptor HowTo Guide .

关于python - 有什么方法可以创建不污染其实例的属性命名空间的 Python 类方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41833266/

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