类A的默认构造函数参数仅创建一次类B-期望每次构造另一个A时都将创建B]] << [

问题描述 投票:0回答:1
刚开始学习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 = []

在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 __(...

python-3.x default-constructor
1个回答
0
投票
班级送礼者:
© www.soinside.com 2019 - 2024. All rights reserved.