进一步呼应迈克和亚历克斯的建议,增加我自己的色彩.
使用实例属性是典型的、更惯用的Python。类属性不是Oft使用的-至少在我连续13年以上的Python中的生产代码中是如此。静态方法和类方法也是如此.只是不太常见,除非有一个特定的用例或者一个不正常的程序员想要炫耀,他们知道Python编程的一些晦涩的角落。
Alex在他的回复中提到,访问将(稍微)快一点,因为查找的级别减少了一次.让我进一步澄清那些还不知道这是如何工作的人,它非常类似于变量访问-搜索按以下顺序进行:
- 本地人
- 非本地人
- 全球
- 内置
对于属性访问,顺序是:
- 实例
- 班级,等级
- 由MRO(方法解析顺序)确定的基类
在上面的例子中,假设您正在查找path
属性。当它遇到类似于“self.path
“,Python将首先查看实例属性以获得匹配;如果失败,它将检查对象从其中实例化的类。最后,它将搜索基类。正如Alex所说,如果在实例中找到属性,它将不会遵从类,因此节省了一点点时间。
然而,如果您坚持类属性,您将不得不放弃这一点的性能,或,另一种选择是通过类而不是实例引用对象,例如,MyController.path
而不是self.path
..这是一个直接查找,它将绕过延迟查找,但是正如Alex下面提到的,这是一个全局变量,因此您丢失了您认为要保存的那个位(除非您创建了一个对[全局]类名的本地引用)。