我想知道两者之间是否存在差异
class Test(object):
def __init__(self):
print self.__class__.__name__
Run Code Online (Sandbox Code Playgroud)
和
class Test(object):
def __init__(self):
print type(self).__name__
Run Code Online (Sandbox Code Playgroud)
?
是否有理由偏好其中一个?
(在我的用例中我想用它来确定记录器名称,但我想这没关系)
在 Python 中使用类变量时,可以通过“self”(感谢引用)或“type(self)”(直接)访问和(如果它是可变的)直接操作它,而不可变变量(例如整数)显然得到当您只使用“self”时,会被新的实例对象遮蔽。
那么,在处理 Python 类变量时,总是使用“type(self)”来处理从类方法中引用的类变量是否更可取/Pythonic?
(我知道类变量有时不受欢迎,但是当我使用它们时,我想以一致的方式访问它们(如果它们是不可变类型,则采用一种方式,如果它们是可变的,则采用另一种方式。)
编辑:是的,如果你修改一个不可变的值,你会得到一个新对象。修改可变对象的值的副作用是导致这个问题的原因 - “self”会给你一个引用,你可以用它来改变类变量而不隐藏它,但是如果你给它分配一个新对象,它会隐藏它。使用 classname.classvar 或 type(self).classvar 或 self.__class__ 可确保您始终使用类变量,而不仅仅是隐藏它(尽管子类使这变得复杂,如下所述)。