gpt4 book ai didi

python - 在 Python 中编写一个接受回调的类?

转载 作者:太空狗 更新时间:2023-10-29 20:46:38 25 4
gpt4 key购买 nike

我需要编写一个允许子类使用函数名称设置属性的类。该函数必须可以从该类的实例中调用。

比如我说我要写一个Fruit类,子类可以传入欢迎信息。 Fruit 类必须公开一个可以设置的属性 print_callback。

class Fruit(object):
print_callback = None

def __init__(self, *args, **kwargs):
super(Fruit, self).__init__(*args, **kwargs)
self.print_callback("Message from Fruit: ")

我需要公开一个可以被这段代码使用的 API(要清楚,这段代码不能改变,假设它是第 3 方代码):

def apple_print(f):
print "%sI am an Apple!" % f

class Apple(Fruit):
print_callback = apple_print

如果我运行:

mac = Apple()

我想得到:

Message from Fruit: I am an Apple!

相反,我得到:

TypeError: apple_print() takes exactly 1 argument (2 given)

我认为这是因为 self 作为第一个参数传入。

那么我该如何编写 Fruit 类呢?谢谢!

最佳答案

Python 假定在类范围内绑定(bind)的任何函数都是方法。如果您想将它们视为函数,则必须深入挖掘它们的属性以检索原始函数对象:

def __init__(self, *args, **kwargs):
super(Fruit, self).__init__(*args, **kwargs)

# The attribute name was changed in Python 3; pick whichever line matches
# your Python version.
callback = self.print_callback.im_func # Python 2
callback = self.print_callback.__func__ # Python 3

callback("Message from Fruit: ")

关于python - 在 Python 中编写一个接受回调的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1567777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com