gpt4 book ai didi

python - 从具有多重继承的类中检索参数

转载 作者:太空宇宙 更新时间:2023-11-04 10:13:17 24 4
gpt4 key购买 nike

是否可以使用 inspect.getargspec() 或任何其他选项从具有多个父类的对象中检索所有参数?

例子:

import inspect

class One:
def __init__(self,a):
self.a = a

class Two:
def __init__(self,b):
self.b = b

class Three(One, Two):
pass

print(inspect.getargspec(Three.__init__))

相反:ArgSpec(args=['self', 'a'], varargs=None, keywords=None, defaults=None) 作为输出,我正在寻找方法:['self', 'a','b'] 参数。

最佳答案

args = ['self']
for C in Three.__mro__:
if '__init__' in C.__dict__:
args += inspect.getargspec(C).args[1:]

编辑:

作为对挠头的人的一点澄清:

self 会在调用 getargspec 时为所有绑定(bind)方法返回,因此一开始就将其作为默认值。这样我们就可以在任何地方跳过它(否则它会多次出现在列表中——也可以使用 set() 来避免这种情况)。

我们遍历类的方法解析顺序列表 (__mro__)。

在正常情况下,这个列表用于确定调用哪个函数,但在初始化的情况下,它告诉 super().__init__() 调用下一个(这就是为什么它是重要的是你总是打电话 - 即使你没有继承任何东西 - 它否则你会打断链)

对于我们返回的每个类类型,查看它是否有自己的 __init__

如果是,则对其运行 getargspec 函数,并将生成的参数名称列表添加到初始列表,跳过 self

注意:对于 python 3+,请改用 getfullargspec

关于python - 从具有多重继承的类中检索参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36994217/

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