我正在阅读 python tutorial .第 3 段让我有点困惑。
“客户应该小心使用数据属性——客户可能会通过标记数据属性来弄乱方法维护的不变量。”
不变量到底是什么意思?它们是指某些方法所依赖的数据属性吗? (例如返回某个数据成员的方法;即 getter 方法)
请您参考如下方法:
我相信他们想说的是,在访问/改变对象的属性时应该小心。 (请注意,我称它们为“属性”,而不是“数据属性”)
这是因为一个对象可能会在属性中放置一些东西,这可能是维护对象状态所必需的,即 invariant。通常不会给您带来麻烦的手段。
但与其他编程语言不同的是,Python 对对象成员没有任何保护。没有私有(private)实例变量或方法†,因此任何人都可以按照他们想要的方式更改对象,甚至可能完全破坏其功能。
因此本教程建议您避免在属性中存储重要的东西——但老实说,确实没有更好的方法,如果有人想弄乱它,他们可以这样做。例如,您可以在运行时换出整个方法,用完全不同的逻辑替换它们。
所以过分保护自己真的不值得。相反,我建议您以清晰的方式记录所有内容。例如。指出哪些属性可供用户自由触摸,哪些仅供内部使用。
† 有一些方法和惯例,例如一个前导下划线表示内部/ protected 成员,两个前导下划线表示私有(private)成员,但这些在技术上不会阻止您访问它,因此它不是一种保护。
