昨天一位朋友向我展示了以下在 Python 中为实例变量提供默认值的技术。该类Foo有自己的bar属性,默认情况下,在不存在的实例上查找属性时会检索该属性。例如,以下代码片段打印4✱。class Foo: bar = 4 def __init__(self): pass def get_bar(self): return self.bar def set_bar(self, bar): self.bar = barprint(Foo().get_bar())最初,我很惊讶这行得通。我认为“回退到类上的定义”的机制将转换/评估/定义foo_instance.get_bar为类上的绑定方法Foo并使其foo_instance.get_bar()有意义是特定于函数的,并且对于非函数会以某种方式失败。事实并非如此。上面的代码printsas ifbar已经self.bar = 4在__init__方法中设置了。这个结构是惯用的吗?我能想到的反对它的唯一论点是它破坏了结构平等,潜在地隐藏了调试时“逻辑上存在”的对象的属性,并且如果默认值是有状态的,则可能会无意中改变全局状态。✱ getter 和 setter 仅用于证明其 Foo.bar真正打算作为默认值foo_instance.bar,不应被解释为支持在惯用 Python 中使用 getter 和 setter。
添加回答
举报
0/150
提交
取消