问题描述
在类的方法中:
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
可能没有引用该对象。想像一下想与某人进行对话,他说:“从现在开始,每当我说'我'或'我'时,我实际上就是那个人。”
这只是为什么我们首先使用self
和cls
命名约定的另一面。就Python而言,您可以使用任何名称作为方法的第一个参数。但是我们建议每个人都使用这些名称,这样当我们阅读彼此的代码时,我们就不必记住每种方法中哪个变量引用了当前对象。
Python本身并不在乎,它不会在那里引发错误消息。