如何将类参数的默认值设置为另一个类实例,该类实例在 Python 中具有自己的默认参数 [duplicate]

How to set the default of a class parameter to another class instance which has its own default parameters in Python [duplicate]

提问人:gebruiker 提问时间:12/24/2022 更新时间:12/24/2022 访问量:249

问:

我正在尝试将一个类的默认变量设置为另一个类的某个实例,该类具有自己的默认参数。然后我面临的问题是,将参数设置为默认值似乎不会创建新实例。

这就是我的意思:

class TestA:
    def __init__(self, x = 2):
        self.x = x
        
class TestB:
    def __init__(self, y = TestA()):
        self.y = y

现在当我跑步时

>>>> t = TestB()

我得到了我所期望的:.据我所知,发生的事情是那个集合,并且由于没有参数调用,所以它集合了 .
最后我跑了.
t.y.x = 2__init__t.y = TestA()TestA()t.y.x = 2t.y.x = 7

在下一步中,我这样做:

>>>> s = TestB()

>>>> s.y.x
     7

我预料到.s.y.x == 2

更是如此,因为当我只是使用 时,那么TestA

>>>> a = TestA()

>>>> a.x = 7

>>>> b = TestA()

>>>> b.x
     2

为什么它没有按预期工作?ts

另外,我怎样才能正确使用这样的结构,其中 for 属性的默认值是 的实例,而 attribute 的默认值是 .yTestAx

python 参数 传递

评论

0赞 Stuart 12/24/2022
因为函数的默认值只计算一次,当遇到 def 值时

答:

1赞 rzz 12/24/2022 #1

它占用了 dafault 参数在 Python 中的工作方式。

您可以使用此方法:

class TestA:
    def __init__(self, x=2):
        self.x = x

class TestB:
    def __init__(self, y=None):
        if y is None:
            y = TestA()
        self.y = y