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

问题描述

在类的方法中:

def weight(self,grid):

    ...

    if self.is_vertical:
        self = self.T

    ...


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

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

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

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

它可以正常工作吗?为什么它指示错误?

解决方法

为什么指示错误?

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

def mymethod(self):
    cur = self
    ...
    cur = cur.T
    ...

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

由于每个人都希望self引用该方法被调用的对象,因此重新分配它也会使其他程序员感到困惑。当稍后在该方法中处理代码时,他们可能没有意识到self可能没有引用该对象。想像一下想与某人进行对话,他说:“从现在开始,每当我说'我'或'我'时,我实际上就是那个人。”

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

Python本身并不在乎,它不会在那里引发错误消息。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...