2016-07-01 5 views
0

I各サブクラスAとB私はRubyの背景から来Pythonのアクセスその文字列名によってクラスを入れ子に

が含まれている必要があり、クラスfooとbarは、Rubyで私が実行中Foo::A, Foo::B, Bar::A, Bar::B

を記述していメインループの主、私はx in [A,B..Z]に反復して(申し訳ありません再びRubyの構文)特定のコンストラクタを呼び出す必要がFoo::xBar::x

pythonのための私の現在のアプローチは、この

ような入れ子になったクラスを使用することです
class Foo: 
    ... 
    class A: 
    ... 
    class B: 
    ... 

class Bar: 
    ... 
    class A: 
    ... 
    class B: 
... 

そして私は、クラスの文字列表現を使用して考えていた[ 'A'、 'B'、... 'Z']と私も

# main loop : 
for x in ['A',...'Z'] 
    Foo.construct_nested_class(x, params) 
    Bar.construct_nested_class(x, params) 

彼らのコンストラクタを呼び出すための方法を見つけますコードのこの作品は、その文字列表現

def str2Class(str): 
    return getattr(sys.modules[__name__], str) 

からクラスを取得することが判明しかし、私は、私は、ネストされたクラスにそれを適用すべきかどうかはわかりません。

このconstruct_nested_class(x, params)メソッドを定義するか、別の方法を提案してもらえますか?私は、Python 2.7

+1

私はRubyについて知らないけど、入れ子のクラスはPythonではまれです。 Pythonにはアクセス修飾子がないので、実際にはそれほど多くはありません。 – user2357112

答えて

0
for name in nested_class_names: 
    getattr(Foo, name)(params) 
    getattr(Bar, name)(params) 

getattr(x, name)を使用しています

nameが参照するどんな文字列で指定されたxの属性にアクセスすることに相当します。

関連する問題