示例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 = []
在impl A中,GiftersInfo的列表为空(按预期)
在清单B中,该列表仅创建一次,随后对Gifters的构造函数的调用以某种方式重用了相同的GiftersInfo.list ...
我按顺序运行这些测试时注意到了这一点:
def test_register_single_gifter(self):
gifters = Gifters()
gifters.register(Gifter("Jos"))
self.assertEqual(1, len(gifters.list()))
=>答:确定
=> B:确定
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
是这样吗?看起来太丑了(也不喜欢其他:)
刚开始学习python时,我在实例化类时注意到一些奇怪的行为:impl A类Gifters:def __init __(self,仓库):self.repo =仓库def __init __(...