2016-06-14 17 views
0

クラスFieldを定義しました。私はABを定義しました。子クラスはFieldです。クラス属性タイプを特定し、その関数を呼び出します。

私は別のクラスToolを定義しました。これには、クラスField、または他のクラス、または普通の変数のいずれかのクラス変数を含めることができます。変数のタイプがFieldの場合は、fun1と呼び出して結果を収集します。

私ができることを示唆してください。私はオブジェクト指向プログラミングの新機能です。

if isinstance(attribute, Field): 
    ... 

または可能性:

class Field(object): 
    def fun1(self): 
    return 'Field' 

class A(Field): 
    def fun1(self): 
    return 'A fun1' 

class B(Field): 
    def fun1(self): 
    return 'B fun1' 

class Tool(object): 
    a1 = A() 
    b1 = B() 
    c1 = 'abc' 

    def fun1(self): 
    all_attributes = dir(self) 
    result_list = [] 
    for attribute in all_attributes: 
     if attribute is of type Field: 
     result_list.append(attribute.fun1()) 
    return return_list 

答えて

1

は、私はあなたがisinstance組み込みを探しているのだと思い

if isinstance(getattr(self, attribute), Field): 
    ... 

それは内の属性の文字列名かもしれattributeようになりますので、ごコード。

一般的に、すべての同種の種類が含まれるようにデータを構築する方がよいことに注意してください。次に、タイプチェックなどは必要ありませんが、そのアドバイスが質問に投稿したジェネリックサンプルコードに役立つかどうかは言い難いですが。

+0

dir()を使用して属性のリストを取得すると、それらはすべて文字列型です。 –

+0

@ Rohit.nib - 右の理由でここにアドバイスをするのは難しいです。 'self'の属性を調べることは、奇妙なことです。 _usually_あなたは、属性が何であるか(そしてそれらのタイプ)を事前に知りたいです。 – mgilson

+0

私はちょうど私が必要とするものを説明するためにsudoのコードを書きました。我々は他の方法でそれをやり遂げることができますか?私はそのタイプに応じてobjの関数を実行したかっただけです。 –

関連する問題