在方法中重新分配“自我”:Python 3.8

Lev*_*kov 0 python self

在类的方法中:

def weight(self, grid):

    ...

    if self.is_vertical:
        self = self.T

    ...


Run Code Online (Sandbox Code Playgroud)

self如果条件为真,我想重新分配给它的转置值。根据 -if语句,我想self稍后在其原始或转置条件下在方法中使用。

据我了解,在方法中,self只是一个参数名称,而不是真正的引用或指向类实例的指针,如在 C++ 或类似语言中,因此我可以自由地重新分配它以在方法范围内使用.

我的问题是为什么 PyCharm 的检查信息警告我

...第一个参数,例如“self”或“cls”,在方法中重新分配。在大多数可以想象的情况下,这种重新分配没有意义,它表明一个错误。

虽然它工作正常?为什么会提示错误?

Bar*_*mar 5

为什么会提示错误?

因为没有充分的理由这样做。没有任何东西会self自动使用该变量,因此无需重新分配它。如果您需要一个有时引用调用该方法的对象但也可以保存其他值的变量,请为此使用不同的变量。

def mymethod(self):
    cur = self
    ...
    cur = cur.T
    ...
Run Code Online (Sandbox Code Playgroud)

请注意,这self只是此方法中的一个局部变量。重新分配self对对象本身或调用该方法的变量没有任何影响。这样做实际上毫无用处,因此它几乎总是表明程序员感到困惑。这就是 Pycharm 警告它的原因。

由于每个人都希望self引用调用该方法的对象,因此重新分配它也会让其他程序员感到困惑。在方法的后面处理代码时,他们可能没有意识到这self可能不是指那个对象。想象试图与一个说“从现在开始,每当我说‘我’或‘我’的时候,我实际上是指那边的那个人。”

这只是为什么我们首先使用selfcls命名约定的另一面。就 Python 而言,您可以为方法的第一个参数使用任何名称。但是我们建议大家使用这些名称,这样当我们阅读彼此的代码时,我们就不必记住每个方法中哪个变量引用了当前对象。

Python 本身并不关心,它不会在那里导致错误消息。