我有两节课。一个在构造函数中实例化另一个的。
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
答案 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。