调用类作用域中定义的 lambda 方法(作为类属性)

Mr_*_*s_D 1 python lambda class-method python-2.7

class _GhostLink(object):
    toGhost = lambda filename: False

class _Mod_AllowGhosting_All(_GhostLink):
    def _loop(self):
        # ...
        if self.__class__.toGhost(fileName) != oldGhost:...
Run Code Online (Sandbox Code Playgroud)

产生:

class _GhostLink(object):
    toGhost = lambda filename: False

class _Mod_AllowGhosting_All(_GhostLink):
    def _loop(self):
        # ...
        if self.__class__.toGhost(fileName) != oldGhost:...
Run Code Online (Sandbox Code Playgroud)

同时传递一个实例,if self.toGhost(fileName) != ...结果如下:

Traceback (most recent call last):
  File "bash\basher\mod_links.py", line 592, in Execute
    changed = self._loop()
  File "bash\basher\mod_links.py", line 587, in _loop
    if self.__class__.toGhost(fileName) != oldGhost:
TypeError: unbound method <lambda>() must be called with _Mod_AllowGhosting_All instance as first argument (got Path instance instead)
Run Code Online (Sandbox Code Playgroud)

为什么toGhost表现得像类方法实例方法?

编辑:我知道类、静态等方法的区别 - 这是一个语法问题

Bi *_*ico 5

看起来你想要一个静态方法:

class _GhostLink(object):
    toGhost = staticmethod(lambda filename: False)
Run Code Online (Sandbox Code Playgroud)

或者:

class _GhostLink(object):
    @staticmethod
    def toGhost(filename):
        return False
Run Code Online (Sandbox Code Playgroud)