gpt4 book ai didi

python - 如何避免在 Python 中的构造函数之间传递属性?

转载 作者:行者123 更新时间:2023-12-05 09:26:24 25 4
gpt4 key购买 nike

class A(SomeBaseClass):
def __init__(self):
super().__init__()
self._attribute_0 = something_0
self._attribute_1 = something_1
# etc.

def some_method(self) -> None:
do_something()

现在假设您有类似的类 B、C、D 等(并非所有类都继承自同一个基类)。它们都有一些独特的功能,从逻辑的角度来看,这些功能很好地封装在这些类中。关键方面是,对于这些类中的每一个,一次总是只有一个实例存在。问题是,有时一个类需要访问另一个类的功能,即

if __name__ == "__main__":
a = A()
b = B(a)
c = C()
d = D(c, a)
b.d = d
etc.

假设存在类 A、B 等的多个实例,这段代码对我来说是合理的,但是由于一次总是只有一个实例存在,因此始终传递它们似乎有点多余围绕在构造函数中(实际上,这些类当然有更复杂的名称,“主”函数变得非常难以阅读......)。

一个解决方案,虽然有争议,但在其他语言中是 Singelton 模式。并且似乎有一些方法可以在 python 中实现 singeltons(参见 here ),但他们似乎不被鼓励(即有些人甚至说 python 中永远不需要它们)。

我的目标非常简单:我希望我的对象a、b、c等在整个项目中都可以访问,而不必在构造函数或通过 b.d = d 等逐一设置它们。

这在 Python 中可行吗?我有哪些选择?


@blue_note 的回答说明

# objects.py
a = A()
b = B(a)
c = C()
d = D(c, a)
b.d = d

然后当您在其他地方需要它们时:

# foo.py
from objects.py import a

class Foo:
def __init__(self):
# use a

最佳答案

只需在单个模块中初始化对象,然后从那里导入它们。 python 模块中的代码在第一次导入时运行,结果被缓存。因此,在后续导入时,所有模块都保证访问对象的相同实例。

关于python - 如何避免在 Python 中的构造函数之间传递属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73987831/

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