我如何修复PyDev"方法应该有自己作为第一个参数"错误

Chr*_* B. 10 python code-analysis pydev

我在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()
Run Code Online (Sandbox Code Playgroud)

给我一个"Method '__enter__- group' should have self as first parameter"错误,以及类似的错误__exit__.有没有办法解决这个问题而不分配self给另一个变量并在其他方法签名中重用该变量?

Fog*_*ird 19

您可以在首选项中禁用该错误...

Window > Preferences > Pydev > Editor > Code Analysis > Others
Run Code Online (Sandbox Code Playgroud)

或者重构代码......

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()
Run Code Online (Sandbox Code Playgroud)

你还有什么期望?错误检查可以帮助您.如果您认为它们不是合法错误,请禁用它们或重构代码.

在这种情况下,我会说重构代码.正如King Radical的回答所证明的那样,它更具可读性.他不明白那s是另一回事self.


Fab*_*zny 18

Ctrl+1在PyDev中使用带错误的行将始终为您提供一个修复程序,允许您忽略行中的PyDev错误.在这种特定情况下,它允许您通过添加#@NoSelf到行尾来忽略错误.Ctrl+1在需要某些未使用的导入时以及在其他情况下也很有用.


小智 5

您可以使用装饰器:

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

        @staticmethod   
        def static():             # static method
        pass
Run Code Online (Sandbox Code Playgroud)

用于此的内置函数