只是一个简单的问题,我很难理解在哪里使用属性与在哪里使用普通的旧属性。对我来说区别有点模糊。任何关于这个主题的资源都会很棒,谢谢!
4 回答
属性比属性更灵活,因为您可以定义函数来描述在设置、获取或删除它们时应该发生的事情。如果您不需要这种额外的灵活性,请使用属性——它们更容易声明且速度更快。
在像 Java 这样的语言中,通常建议始终编写 getter 和 setter,以便将来可以选择用更复杂的版本替换这些函数。这在 Python 中不是必需的,因为访问属性和属性的客户端代码语法是相同的,因此您可以随时选择稍后使用属性,而不会破坏向后兼容性。
关键是语法是可以互换的。总是从属性开始。如果您发现在访问属性时需要额外的计算,请将其替换为属性。
属性是属性+后验封装。
当您将属性转换为属性时,您只需定义一些“附加”到它的getter和setter,这将挂钩数据访问。然后,您不需要重写其余代码,访问数据的方式是相同的,无论您的属性是否为属性。
由于这种非常聪明且强大的封装机制,在 Python 中,您通常可以使用属性(无需先验封装,因此无需任何getter或setter),除非您在访问数据时需要做一些特殊的事情。
如果是这样,那么您只需在需要时定义setter和getter,并将它们“附加”到属性,将其变成属性,而不会影响您的其余代码(而在 Java 中,您通常首先要做的就是当创建一个字段时,通常是私有的,是创建它的关联getter和setter方法)。
关于属性、属性和描述符的好页面在这里
除了 Daniel Roseman 所说的之外,我经常在包装某些东西时使用属性,即,当我自己不存储信息但包装对象存储时。然后属性成为出色的访问器。