在另一类构造函数中实例化类的独特实例



我有两个类。一个在其构造函数中实例化另一个。

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

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

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

在类创建时间评估details的默认参数!Overview的所有实例(如果不提供)将具有相同的Details实例。沿着:

的线进行更改
class Overview(object):
    def __init__(self, details=None):
        self.details = Details() if details is None else details

这对初学者来说是一个常见的惊喜来源,尤其是对于可变的默认论点。

最新更新