我有以下代码。在
class SomeClass:
a = lambda self: self.b()
def __init__(self):
self.b = lambda self: None
s = SomeClass()
s.a()
它告诉我“TypeError:()只接受1个参数(给定0)”。我想知道为什么。
我的解释:
类方法,所以s.a()
equalsSomeClass.a(s)
对象的属性(不是一个方法,只是一个函数),这就是为什么self.b()
不等于{
So在a = lambda self: self.b()
中,b
的参数丢失。
我说得对吗?
p.S.这是封闭效应吗?在
class SomeClass:
a = lambda self: self.b()
def __init__(self):
self.data = 12
self.b = lambda: self.data
s = SomeClass()
print s.a() #12
s.data = 24
print s.a() #24
这里的问题是绑定方法和函数之间的区别
举个简单的例子:
^{pr2}$如果仔细观察,这两个函数的类型并不相同:
因此,当我们调用它们时,它们会收到不同的参数:
注意,只有“bound”函数传递了一个
self
参数。在3.5-2.7中测试过的东西可能有稍微不同的名字
相关问题 更多 >
编程相关推荐