在另一个类构造函数中实例化类的唯一实例

时间:2017-02-19 05:21:10

标签: python

我有两节课。一个在构造函数中实例化另一个的。

class Details(object):
    pass

class Overview(object):
    def __init__(self, details = Details()):
        self.details = details

当我创建两个概述实例时,它们会更改相同的详细信息实例。概述不应该在每次实例化时创建Details()的新实例吗?

ov1 = Overview()
ov2 = Overview()
print(id(ov1.details))
print(id(ov2.details))

# 2940786890344
# 2940786890344

1 个答案:

答案 0 :(得分:2)

details的默认参数在创建课时评估!如果未提供,Overview的所有实例都将具有相同的Details实例。改变:

class Overview(object):
    def __init__(self, details=None):
        self.details = Details() if details is None else details

对于初学者来说,这是一个常见的惊喜,尤其是mutable default arguments