gpt4 book ai didi

python - 在类变量中创建对类的引用并在 __init__ 中实例化它们

转载 作者:太空宇宙 更新时间:2023-11-04 00:02:16 24 4
gpt4 key购买 nike

我最近在 Python 中看到了相当多的以下模式:

class Foo: pass

class Bar:
foo_class = Foo

def __init__(self):
self.foo = self.foo_class()

据我了解,Bar 类首先创建对 Foo 类的引用作为类变量 foo_class 然后创建实例__init__ 中的 Foo。它有什么优势,而不是直接在 __init__ 中实例化 Foo 吗?

class Foo: pass

class Bar:
def __init__(self):
self.foo = Foo()

最佳答案

有一些小好处,因为您不再在无法更改的地方硬编码对 Foo 的引用。在第一个示例中,如果您希望 Bar 的后续实例使用 Foo 以外的东西,您可以更改 Bar.foo_class 的值。在第二个示例中,没有简单的方法可以做到这一点。

不过,更好 的方法是参数化 __init__ 本身以接受要使用的类。类属性只是一个默认值:

class Bar:
foo_class = Foo

def __init__(self, foo_class=None):
if foo_class is None:
foo_class = self.foo_class
self.foo = foo_class()

如果 foo_class __init__ 使用,您可以完全放弃类属性并为参数设置默认值。

class Bar:

def __init__(self, foo_class=Foo):
self.foo = foo_class()

(如果 Bar.foo_class __init__ 之外使用,您可能需要确保没有任何问题self.foo 是使用可能不同的类创建的。)

关于python - 在类变量中创建对类的引用并在 __init__ 中实例化它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55300438/

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