如何修复PyDev "方法应以self作为第一个参数"错误

15 投票
6 回答
30169 浏览
提问于 2025-04-15 18:19

我在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()

它给我报了一个错误,提示说"方法 '__enter__- group' 的第一个参数应该是 self",还有一个类似的错误是关于__exit__的。有没有办法解决这个问题,而不需要把self赋值给另一个变量,然后在其他方法的定义里重复使用这个变量呢?

6 个回答

6

你可以使用一个装饰器:

class aClass:
        def __init__(self):       # instance-dependent method
        self.atribite1 = []
        self.atribute2 = 0 

        @staticmethod   
        def static():             # static method
        pass

这是一个内置函数,可以用来实现这个功能

18

在PyDev中,如果你在一行代码上遇到错误,可以按下 Ctrl+1,它会给你一个解决方案,让你可以忽略这行代码的错误。在这个特定的情况下,它会通过在行末加上 #@NoSelf 来让你忽略这个错误。此外,Ctrl+1 在处理一些未使用的导入或者其他情况时也很有用。

21

你可以在设置里关闭那个错误提示...

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

撰写回答