我正在阅读python tutorial。第3段让我感到困惑。
“客户端应谨慎使用数据属性 - 客户端可能会通过标记其数据属性来破坏方法维护的不变量。”
不变量究竟是什么意思?它们是指某些方法依赖的数据属性吗? (例如,返回某个数据成员的方法;即getter方法)
答案 0 :(得分:1)
我相信他们想说的是在访问/改变对象的属性时应该小心。 (请注意,我称之为“properties”,而非“数据属性”)
这是因为一个对象可能会在维护对象状态所必需的属性中放置一些东西,即通常不会给出的invariant意味着混乱。
但与其他编程语言不同,Python对对象成员没有任何保护。没有私有实例变量或方法†,因此任何人都可以按照他们想要的方式更改对象,可能会完全破坏其功能。
因此教程建议你避免在属性中存储重要的东西 - 但说实话,没有更好的方法,如果有人想要搞乱它,他们就可以。例如,您可以在运行时交换整个方法,用完全不同的逻辑替换它们。
因此,过分保护自己并不值得。相反,我建议您以明确的方式记录所有内容。例如。指出用户可以自由触摸哪些属性,哪些属性仅供内部使用。
†有一些手段和惯例,例如内部/受保护成员的一个主要下划线,以及私人成员的两个主要下划线,但这些不会在技术上阻止您访问它,因此它不是一种保护。