相关疑难解决方法(0)

Python:self .__ class__ vs. type(self)

我想知道两者之间是否存在差异

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

61
推荐指数
2
解决办法
3万
查看次数

Python:self 与 type(self) 以及类变量的正确使用

在 Python 中使用类变量时,可以通过“self”(感谢引用)或“type(self)”(直接)访问和(如果它是可变的)直接操作它,而不可变变量(例如整数)显然得到当您只使用“self”时,会被新的实例对象遮蔽。

那么,在处理 Python 类变量时,总是使用“type(self)”来处理从类方法中引用的类变量是否更可取/Pythonic?

(我知道类变量有时不受欢迎,但是当我使用它们时,我想以一致的方式访问它们(如果它们是不可变类型,则采用一种方式,如果它们是可变的,则采用另一种方式。)

编辑:是的,如果你修改一个不可变的值,你会得到一个新对象。修改可变对象的值的副作用是导致这个问题的原因 - “self”会给你一个引用,你可以用它来改变类变量而不隐藏它,但是如果你给它分配一个新对象,它会隐藏它。使用 classname.classvar 或 type(self).classvar 或 self.__class__ 可确保您始终使用类变量,而不仅仅是隐藏它(尽管子类使这变得复杂,如下所述)。

python class-variables

1
推荐指数
1
解决办法
3270
查看次数

标签 统计

python ×2

class-variables ×1