Skip to main content
 首页 » 编程设计

python之Python 3 的静态类属性

2025年05月04日14EasonJim

我需要为类定义自定义属性,但重新定义 __getattr__ 仅适用于实例,不适用于类本身,并且将其设为静态并没有真正帮助。我知道类似 this 的东西适用于 Python 2,但我在 Python 3 上找不到任何类似的东西,我怀疑是由于改变了元类的工作方式。我怎样才能达到类似的结果?

请您参考如下方法:

您需要更改在 Python 3 中指定元类的方式。它已从 dunder 属性 __metaclass__ 更改为您在基类之后提供的 kwarg。除此之外,那里提供的解决方案就足够了:

class MyClass(metaclass = FooType): pass 

现在 MyClass.Foo 或 MyClass.Bar 分别调用方法 _foo_func 和 _bar_func。

请注意,自定义描述符对象(链接问题中的第二个答案)是:

  1. 可移植性更强,您可以在类定义中显式继承 object。
  2. 比创建自定义元类更易于维护。元类可能会导致困惑和奇怪的冲突,在你掌握它们之后描述符很简单