gpt4 book ai didi

python - 更改 Python 类字典中的值时的 NoneType

转载 作者:太空宇宙 更新时间:2023-11-04 11:00:00 27 4
gpt4 key购买 nike

我正在尝试更改 python 类的字典,以便每次将函数对象添加到字典时,我都添加了我的类的实例,我在其中重新定义了 __call__。我为元类使用自定义字典,在字典类的 __setitem__ 中实例化我用来更改添加函数的行为的类,并向字典添加一个非 NoneType 对象。但是,当我用我正在包装的函数实例化类并尝试调用相应的函数时,我得到一个“NoneType not callable”错误,并且我在类字典中包装的函数对象是 = None。任何想法为什么会发生这种情况?谢谢!

最佳答案

开始之前 - 发布的代码是您的实际代码吗?它实际上在 Python 3.2 下对我不起作用——我已经稍微修正了它。这是我所做的更改,开始:

class_dict = list()

现在

class_dict = {}

并且在 OverloadedFunction.__call__ 中:

for fkey, function in class_dict.items():
inspect_t = inspect.getfullargspec(function)
print(inspect_t)

member_dict.__setitem__ 中:

if value.__class__.__name__ == "function":
class_dict[key] = value
dict.__setitem__(self,key,OverloadedFunction(key,value))

我相信这就是您的意图。我从来没有遇到 NoneType not callable 错误 - 通过这些修改(加上顶部的 import inspect),您的代码可以工作并打印参数规范:

$ python3 temp.py
FullArgSpec(args=['self', 'a', 'b'], varargs=None, varkw=None, defaults=None, kwonlyargs=[], kwonlydefaults=None, annotations={'a': <class '__main__.Asteroid'>, 'b': <class '__main__.Asteroid'>})

现在,您想要实现多重方法 - 我所做的修改排除了这一点,因为您的多重方法在每次调用 __setitem__ 时都会被覆盖,因此您可以从那里开始工作(也许使用 collections .defaultdict(list) 并将 append 改为 class_dict[key]

我可以推荐一些东西吗?我认为您不需要元类 - http://www.artima.com/weblogs/viewpost.jsp?thread=101605为 Python 2.x 提供了一个非常简单的多方法实现。

关于python - 更改 Python 类字典中的值时的 NoneType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6403259/

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