class A 的默认构造函数参数仅创建一次 class B - 期望每次构造另一个 A 时都创建 B

default constructor parameter of class A creates class B only once - expecting B to be created each time I construct another A

刚开始学习python我在实例化时注意到一些奇怪的行为类:

实现 A

class Gifters:
    def __init__(self, repository):
        self.repo = repository

    def __init__(self):
        self.repo = GiftersInfo()

实现 B

class Gifters:
    def __init__(self, repository=GiftersInfo()):
        self.repo = repository

双方通话:

class GiftersInfo:
    def __init__(self):
        self.list = []

在实现 A 中,GiftersInfo 列表为空(如预期)

在实现 B 中,列表仅创建一次,稍后调用 Gifters 的构造函数会以某种方式重用相同的 GiftersInfo.list...

我在 运行 这些测试(按顺序)时注意到了这一点:

def test_register_single_gifter(self):
    gifters = Gifters()
    gifters.register(Gifter("Jos"))

    self.assertEqual(1, len(gifters.list()))

=> 答:好的

=>乙:好的

def test_without_gifters(self):
    gifters = Gifters()
    self.assertEqual(0, len(gifters.list()))

=> 答:好的

=> B: 失败:预期为 0 但实际为 1(仍包含上次测试的 "Jos")

但我不想使用 impl A,因为这会给我警告:重新声明 INIT(我不喜欢警告;)

有人可以解释一下吗?
甚至可能建议 pythonist 方法来做到这一点?

编辑: 在文档中我发现这是一个建议:

class Gifters:
    def __init__(self, repository=None):
        if repository is None:
            self.repo = GiftersInfo()
        else:
            self.repo = repository

是这样吗?看起来很丑(也不喜欢 else :)

class 送礼者:

def __init__(self, repository=None):

    if repository is None:

        self.repo = GiftersInfo()

    else:

        self.repo = repository

确实是要走的路