为了账号安全,请及时绑定邮箱和手机立即绑定

将类属性定义为实例变量的默认值是否惯用

将类属性定义为实例变量的默认值是否惯用

蛊毒传说 2021-08-05 15:22:13
昨天一位朋友向我展示了以下在 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。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信