延迟静态类成员初始化

发布于 2024-12-11 15:30:21 字数 307 浏览 2 评论 0原文

我有这个(示例)代码:

init()

class A:
    foo = bar()

    def __init__(self):
        print(A.foo)

问题是,除非首先调用 init() ,否则函数 bar() 拒绝工作。对于这个问题,有什么好的 Python 式解决方案吗?


在我的具体情况下, init() 是第三方的,无法调整,并且在与定义 A 不同的文件中调用。

I have this (example) code:

init()

class A:
    foo = bar()

    def __init__(self):
        print(A.foo)

The problem is, the function bar() refuses to work unless init() has been called first. What is a nice Pythonesque solution for this problem?


In my specific situation init() is third-party and can not be adapted and is called in a different file than A is defined.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

执妄 2024-12-18 15:30:21

像这样?

class A:
    foo = None
    def __init__(self):
        if A.foo is None:
             A.foo = bar()
        print(A.foo)

如果您不确定 A.__init__() 是否会被调用(例如,当在显式调用A 对象的构造函数之前解封它)。

Like this?

class A:
    foo = None
    def __init__(self):
        if A.foo is None:
             A.foo = bar()
        print(A.foo)

You could also move the if statement to A.__new__() if you are not sure A.__init__() will be called (e.g. when unpickling an A object before explicitly calling its constructor).

倾城泪 2024-12-18 15:30:21

您可以将对 bar() 的调用包装在另一个函数中,这也将确保 init() 已被调用。

You could wrap the call to bar() in another function that will also ensure that init() has been called.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文