Python通过字符串名称访问嵌套类

时间:2016-07-01 23:38:40

标签: python python-2.7

我有Foo和Bar类,每个类都应该包含子类A和B

我来自Ruby背景,在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 个答案:

答案 0 :(得分:0)

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

getattr(x, name)相当于访问由x引用的字符串命名的name属性。