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

时间:2016-05-03 01:35:36

标签: python inheritance introspection

是否可以使用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。

2 个答案:

答案 0 :(得分:2)

您可能需要先阅读python Mixins

通常,使用具有冲突名称的两个类来使用多重继承是非常糟糕的形式。最左边的类总是优先考虑,导致使用覆盖方法的其他类的方法有些时髦。

如果你想要一个具有可变数量的args / kwargs的对象,你应该只指定它。

class Foo(object):

    def __init__(self, **kwargs):
        for k, v in kwargs.iteritems():
            setattr(self, k, v)

答案 1 :(得分:2)

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