python - python中具有继承的动态类

标签 python oop

如何在类中动态创建类? 正如我在下面尝试的那样,我得到一个 NameError: name 'Foo is not defined. 我是 Python 的新手,如果很明显,请原谅我。

class Parent(object):
    name2class = {'foo' : Foo, 'bar' : Bar }

    def do(self,string):
        return name2class[string]()

class Foo(Parent):
    pass

class Bar(Parent):
    pass

if __name__ == '__main__':
    parent = Parent()
    instance = parent.do()

最佳答案

当你写这个的时候,你需要在 Parent 上面定义 FooBar 因为 Parent 引用其他类。

编辑:您只需要将那些类引用移动到方法中:

class Parent(object):
    def do(self,string):
        name2class = {'foo' : Foo, 'bar' : Bar }
        return name2class[string]()

class Foo(Parent):
    pass

class Bar(Parent):
    pass

if __name__ == '__main__':
    parent = Parent()
    instance = parent.do('foo')

Edit2:这是你的出厂版本:

class Parent(object):
    # Add shared methods here
    pass

class Foo(Parent):
    # Add unique methods
    pass

class Bar(Parent):
    # Add unique methods
    pass

class ParentFactory(object):
    def __init__(self):
        self.name2class = {'foo' : Foo, 'bar' : Bar}

    def create(self, string):
        return self.name2class[string]()

if __name__ == '__main__':
    factory = ParentFactory()
    instance = factory.create('foo')

关于python - python中具有继承的动态类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19422030/

相关文章:

python - 如何检查日期时间对象是否使用 pytz 本地化?

python - 查找工具/脚本/子目录

java - Java 中的继承与现实世界中的继承有何不同?

javascript - 为数组索引赋予属性的问题

oop - DART中类字段的默认值

java - 两个物体之间的欧氏距离

python - Keras:计算模型输出与输入返回的导数 [无]

Python 记录器在 atexit 处理程序之前被清理

python - 如何在所有列上使用 MinMaxScaler?

javascript - es6 未捕获引用错误 : class is not defined