gpt4 book ai didi

python - __getattr__ 在一个类上而不是(或以及)一个实例

转载 作者:太空狗 更新时间:2023-10-30 02:05:26 24 4
gpt4 key购买 nike

我知道我可以编写如下代码:

class A :
def __getattr__ (self, name) :
return name

捕获对类实例上未定义属性的访问,因此:

A().ATTR == 'ATTR'

为真。但是有什么办法可以为类(class)本身做到这一点吗?我希望能够让以下两行都有效,并且可以区分(即调用了不同的魔术方法,或者魔术方法可以告诉它是如何调用的)

a = A().ATTR
b = A.ATTR

我怀疑答案是,但也许有一些深层次的 python ju-ju?

编辑:实际问题是以向后兼容的方式扩展自定义事件记录库。 ORM 代码支持类似

的代码
ar = AR_people()
ar.find()
name = ar.name

访问表,其中 name 可能会映射到不同的列名,例如pe_name。我们希望能够写出类似的东西

ar.filter(AR_people.age >= 21)

最后是

pe_age >= 21

(很像其他 ORM 库所做的),所以 AR_people.age 需要返回一个实现了 __ge__ 的类的实例等等来完成转换魔法。

最佳答案

您可以使用 metaclass :

In [1]: class meta(type):
...: def __getattr__(self, name):
...: return name
...:
...:

In [2]: class A(object):
...: __metaclass__ = meta
...: def __getattr__(self, name):
...: return name
...:
...:

In [3]: A().attr
Out[3]: 'attr'

In [4]: A.attr
Out[4]: 'attr'

关于python - __getattr__ 在一个类上而不是(或以及)一个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11559120/

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