Python 初始化一个参数为空(None)的函数变量
显然,我可以犯错,这就是我提这个问题的原因 我不太习惯动态类型的语言,它们没有太多的错误提示。
我想创建一个Python类,这个类里面有一个成员,可以设置为一个接收一个参数的函数指针。
最开始我尝试了(简化的例子)
class MyClass():
def __init__(self):
self.__myFunc = None
# func is a pointer to a function that takes 1 paramater
def setFunc(self, func):
self.__myFunc = func
def getData(self):
return 42
def handleData(self):
data = self.getData()
if self.__myFunc is not None:
self.__myFunc(data)
# Separate function not in class
def MyPrint(d)
print(d)
m = MyClass()
m.setFunc(MyPrint)
m.handleData()
我遇到的第一个问题是 self.__myFunc is not None
在if测试中总是返回False,所以我暂时把它去掉了。
第二个问题是 self.__myFunc(data)
这行代码导致了一个 TypeError: 'NoneType' object is not callable
的错误。根据我查的一个链接 Python中的空函数对象,我把 self.__myFunc = None
改成了 self.__myFunc = lambda: None
。
但是这个改动导致了一个新的错误 TypeError: <lambda>() takes 0 positional arguments but 1 was given
。
理想情况下,我希望能做到这一点,而不需要创建一个接收参数但什么都不做的新函数,因为这样看起来很不优雅。
1 个回答
1
你的示例代码里有很多语法错误,而且你写的是一个函数(def MyClass
),而不是一个类(class MyClass
)。下面是一个可以正常运行的代码版本:
def getData():
return [1, 2, 3, 4, 5]
class MyClass(object):
def __init__(self):
self.__myFunc = None
# func is a pointer to a function that takes 1 paramater
def setFunc(self, func):
self.__myFunc = func
def handleData(self):
data = getData()
if self.__myFunc is not None:
self.__myFunc(data)
def MyPrint(d):
print(d)
m = MyClass()
m.setFunc(MyPrint)
m.handleData()
你可以对比一下你写的和我写的,看看有什么不同——有些差别可能很细微。