如何正确使用空列表作为构造函数中只有**kwargs参数的默认参数

2024-05-29 03:43:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道使用空列表(或任何其他可变类型)作为默认参数不是一个好主意,正如这里所描述的: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()

现在我不确定我是否通过使用默认字典并在其中定义新的空列表来避免可变默认参数的危险,或者这种方法是否会产生潜在的危险后果。有人能确认我所做的是安全的吗?如果不是,为什么


Tags: keyinselfdefault列表base参数value

热门问题