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)
产生
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.toGhost(fileName) != oldGhost:
TypeError: <lambda>() takes exactly 1 argument (2 given)
中传递实例时导致:
toGhost
installsoftware.ps1 -DeployModules "Base, Pack1, Pack3"
installsoftware.ps1 -DeployModules "All"
如何表现为 classmethod 实例方法?
编辑:我知道类,静态等方法的区别 - 这是一个句法问题
答案 0 :(得分:4)
看起来你想要一个静态方法:
class _GhostLink(object):
toGhost = staticmethod(lambda filename: False)
或:
class _GhostLink(object):
@staticmethod
def toGhost(filename):
return False
答案 1 :(得分:2)
发生这种情况的原因基本上是lambda
和def
做同样的事情,除了def
也分配一个变量,也就是说,两个构造都产生一个函数。
函数(无论是从lambda
还是def
)到实例方法的绑定是因为函数也是描述符;请记住,在每一个案例中:
foo = lambda (...): (...)
与:
相同def foo(...):
return (...)
所以当你说:
class _GhostLink(object):
toGhost = lambda filename: False
就像你说过的那样:
class _GhostLink(object):
def toGhost(filename):
return False
故事的寓意是你应该从不使用lambda
作为任务的右侧;它不是&#34;更好&#34;甚至使用def
。所有这一切都让人感到困惑。