【发布时间】:2012-05-31 12:09:23
【问题描述】:
可能重复:
“Least Astonishment” in Python: The Mutable Default Argument
上课
class ValidationResult():
def __init__(self, passed=True, messages=[], stop=False):
self.passed = passed
self.messages = messages
self.stop = stop
运行
foo = ValidationResult()
bar = ValidationResult()
foo.messages.append("Foos message")
print foo.messages
print bar.messages
产生
['Foos message']
['Foos message']
这个
foo = ValidationResult()
bar = ValidationResult(messages=["Bars message"])
foo.messages.append("Foos message")
print foo.messages
print bar.messages
生产
['Foos message']
['Bars message']
我想我在这里错过了理解实例属性的机会。在第一个示例中,我预计 Foos message 仅适用于 foo。什么是声明对象属性只能通过其实例可变的正确方法?
使用 Python 2.7.1
【问题讨论】:
-
对此有很多问题。不要使用可变对象作为函数的默认参数...
标签: python