我在Eclipse中使用PyDev开发Python,我的一些代码在代码分析工具中生成错误。具体做法是:
class Group(object):
def key(self, k):
class Subkey(object):
def __enter__(s):
self._settings.beginGroup(k)
return self
def __exit__(s, type, value, tb):
self._settings.endGroup()
return Subkey()
给我"Method '__enter__- group' should have self as first parameter"
错误,__exit__
出现类似错误。有没有办法解决这个问题而不将self
分配给另一个变量并在其他方法签名中重用该变量?
答案 0 :(得分:19)
您可以在首选项中禁用该错误...
Window > Preferences > Pydev > Editor > Code Analysis > Others
或重构代码......
class Group(object):
def key(self, k):
outer_self = self
class Subkey(object):
def __enter__(self):
outer_self._settings.beginGroup(k)
return outer_self
def __exit__(self, type, value, tb):
outer_self._settings.endGroup()
return Subkey()
您还期待什么?错误检查可以帮助您。如果您认为它们不是合法错误,请禁用它们或重构代码。
在这种情况下,我会说重构代码。正如King Radical的回答所证明的那样,它更具可读性。他不明白s
是另一个self
。
答案 1 :(得分:18)
在带有PyDev错误的行中使用Ctrl+1
将始终为您提供一个修复程序,允许您忽略该行中的PyDev错误。在这种特定情况下,它允许您通过将#@NoSelf
添加到行尾来忽略错误。当需要一些未使用的导入时以及在其他情况下,Ctrl+1
也很有用。
答案 2 :(得分:3)
IMO这是一个愚蠢的警告。 名称“自我”只是惯例。我习惯使用名称“_”来允许成员名称更明显,
class myClass( object ):
def __init__( _, color, shape, weight ):
_.color=color
_.shape=shape
_.weight=weight
...
我在我的数千行代码库中得到了这个警告。所以我将关闭此警告。很高兴能够指定“对于这个项目,我按惯例使用'_'”......
答案 3 :(得分:2)
PyDev告诉你Python类方法必须有self
作为他们收到的第一个变量,如果他们要访问类成员变量的话。请参阅:http://www.python.org/doc/faq/general/#why-must-self-be-used-explicitly-in-method-definitions-and-calls
编辑:我最初没有想到你可能正在使用s
而不是self
,但鉴于其他答案,可能会这样。但是,如果您要这样做,则还需要在方法中使用s
作为变量,而不是self
。
答案 4 :(得分:2)
首先它不应该是错误,因为使用“self”只是一个被广泛接受的约定。它应该是一个警告,意思是“你确定你使用类实例作为第一个参数吗?”
答案 5 :(得分:2)
你可以使用装饰者:
class aClass:
def __init__(self): # instance-dependent method
self.atribite1 = []
self.atribute2 = 0
@staticmethod
def static(): # static method
pass
答案 6 :(得分:0)
def __enter__(self):
和
def __exit__(self, type, value, tb):
类成员方法总是需要让它们的第一个参数为self