2016-07-01 12 views
0

Ich habe Klassen Foo und Bar, die jeweils Unterklassen A enthalten sollte und BPython Zugriff verschachtelte Klassen durch ihre Zeichenfolgennamen

ich aus einem Rubin Hintergrund kommen, in Ruby ich von Foo::A, Foo::B, Bar::A, Bar::B

Während der Ausführung schreiben würde Haupthauptschleife, ich brauche Bar::x

für python Mein aktueller Ansatz auf x in [A,B..Z] und rufen die spezifischen Konstrukteure (wieder Ruby-Syntax sorry) Foo::x, iterieren ist verschachtelte Klassen wie diese

zu verwenden
class Foo: 
    ... 
    class A: 
    ... 
    class B: 
    ... 

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

Und ich dachte an die Stringdarstellung Klassen [ 'A', 'B', ... 'Z'] und einen Weg finden, ihre Konstrukteure auch nennen

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

I eine Klasse von seiner String-Darstellung zu erhalten, dieses Stück Code gefunden

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

Aber dann bin ich sicher nicht, wie ich es verschachtelte Klassen gelten.

Können Sie mir helfen, entweder diese construct_nested_class(x, params) Methode zu definieren, oder vielleicht einen anderen Ansatz vorschlagen.

ich Python bin mit 2,7

+1

Ich weiß nicht über Ruby, aber Verschachtelung Klassen ist ziemlich ungewöhnlich in Python. Es bringt nicht wirklich viel, da Python keine Zugriffsmodifikatoren hat. – user2357112

Antwort

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

getattr(x, name) entspricht das Attribut der x durch was auch immer Zeichenfolge mit dem Namen für den Zugriff auf name bezieht.

Verwandte Themen