只是一个简单的问题,我在理解使用属性的位置与使用普通旧属性的位置时遇到一些困难。我的区别有点模糊。关于这个问题的任何资源都很棒,谢谢!
答案 0 :(得分:15)
属性比属性更灵活,因为您可以定义描述在设置,获取或删除它们时应该发生什么的函数。如果您不需要这种额外的灵活性,请使用属性 - 它们更容易声明且更快。
在Java等语言中,通常建议总是编写getter和setter,以便将来可以选择用更复杂的版本替换这些函数。这在Python中不是必需的,因为访问属性和属性的客户端代码语法是相同的,因此您可以随后选择使用属性,而不会破坏向后兼容性。
答案 1 :(得分:13)
重点是语法是可以互换的。始终从属性开始。如果在访问属性时发现需要其他计算,请将其替换为属性。
答案 2 :(得分:1)
属性是属性+ 后验封装。
当您将属性转换为属性时,您只需定义一些 getter 和 setter 即可附加“它,挂钩数据访问。然后,您不需要重写其余代码,访问数据的方式是相同的,无论您的属性是否是属性。
由于这种非常聪明且功能强大的封装机制,在Python中你通常可以使用属性(没有先验封装,所以没有任何 getter nor setter ),除非您在访问数据时需要做一些特殊的事情。
如果是这样,那么你只需要定义 setters 和 getters ,并将它们“附加”到属性,将其转换为属性,而不是任何属性其余代码的发生率(而在Java中,通常在创建字段时通常做的第一件事,通常是私有)是创建它的关联 getter < / em>和 setter 方法)。
关于属性,属性和描述符here
的精彩页面答案 3 :(得分:0)
除了丹尼尔罗斯曼所说的,我经常在包装东西时使用属性,即当我不自己存储信息但是包裹对象时。然后属性成为优秀的访问者。