类实例作为静态属性

2024-04-06

Python 3 不允许您在其主体内引用类(方法中除外):

class A:
    static_attribute = A()

    def __init__(self):
        ...

这就提出了一个NameError在第二行,因为'A' is not defined.

备择方案

我很快找到了一种解决方法:

class A:
    @property
    @classmethod
    def static_property(cls):
        return A()

    def __init__(self):
        ...

尽管这并不完全相同,因为它每次都会返回不同的实例(您可以通过第一次将实例保存到静态变量来防止这种情况)。

是否有更简单和/或更优雅的替代方案?

EDIT:我已将有关此限制原因的问题移至单独的问题 https://stackoverflow.com/questions/34558324/why-doesnt-python-allow-referencing-a-class-inside-its-definition


表达方式A()上课之前无法运行A已被定义。在您的第一个代码块中,定义A在您尝试执行时尚未完成A().

这是一个更简单的替代方案:

class A:
    def __init__(self):
        ...

A.static_attribute = A()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

类实例作为静态属性 的相关文章

随机推荐