我知道使用空列表(或任何其他可变类型)作为默认参数不是一个好主意,正如这里所描述的:Why is the empty dictionary a dangerous default value in Python?
我正在编写一个包含大量关键字参数的类,这就是为什么我切换到**kwargs参数(Class with too many parameters: better design strategy?)
我的班级是这样的:
class Scale:
fifth_tuning = {"perfect":3/2, "meantone":5**(1/4), "equal":(2**7)**(1/12)}
def __init__(self, **kwargs):
scale_defaults = {
"stack_span": 7,
"stack_interval": self.fifth_tuning["perfect"],
"base_frequency": 261.626,
"base_position": 0,
"omit_positions": list()
}
for (key, default_value) in scale_defaults.items():
setattr(self, "_"+key, kwargs.get(key, default_value))
self._freqarray = []
self._generate_freqarray()
现在我不确定我是否通过使用默认字典并在其中定义新的空列表来避免可变默认参数的危险,或者这种方法是否会产生潜在的危险后果。有人能确认我所做的是安全的吗?如果不是,为什么
目前没有回答
相关问题 更多 >
编程相关推荐