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
确实是要走的路
刚开始学习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
确实是要走的路