【发布时间】:2014-09-15 10:05:28
【问题描述】:
在 Python 中使用类变量时,可以通过“self”(感谢引用)或“type(self)”(直接)访问和(如果它是可变的)直接操作它,而不可变变量(例如,整数) 当您只使用“self”时,显然会被新的实例对象遮蔽。
那么,在处理 Python 类变量时,是否最好/Pythonic 总是简单地使用“type(self)”来处理从类方法中引用的类变量?
(我知道类变量有时不受欢迎,但当我使用它们时,我希望以一致的方式访问它们(如果它们是不可变类型则以一种方式访问它们,如果它们是可变类型则以另一种方式访问。)
编辑:是的,如果您将值修改为不可变,您将获得一个新对象。修改可变对象的值的副作用是导致这个问题的原因 - “self”将为您提供一个参考,您可以使用它来更改类变量而不隐藏它,但是如果您为其分配一个新对象,它会隐藏它。使用 classname.classvar 或 type(self).classvar 或 self.__class__ 可确保您始终使用类变量,而不仅仅是隐藏它(尽管子类使这变得复杂,如下所述)。
【问题讨论】:
-
你能展示一些示例代码吗?类方法是什么意思?你是指用@classmethod 修饰的方法,还是只是一个类的方法?
-
我的意思是类的常规方法。下面有一些示例代码 - 尽管需要进行一些澄清,但似乎问题本身已被理解。