2016-05-03 10 views
1

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']

答えて

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

いくつかの説明が劇的にあなたの答えの値が増加します:) – gofr1

2

まず、python Mixinsをお読みください。

一般に、競合する名前を持つ2つのクラスを使用して複数の継承を使用するのはかなり悪いフォームです。一番左のクラスは常に優先順位が付けられ、上書きされたメソッドを使用する他のクラスのメソッドのためのいくつかのファンキーなものにつながります。

可変数のargs/kwargsを持つオブジェクトが必要な場合は、それを指定するだけです。

class Foo(object): 

    def __init__(self, **kwargs): 
     for k, v in kwargs.iteritems(): 
      setattr(self, k, v) 
関連する問題