【问题标题】:Using enum for creating new instances of a subclass in python使用枚举在python中创建子类的新实例
【发布时间】:2018-01-16 09:44:33
【问题描述】:

我有以下 Java 代码,其中枚举数据类型用于创建基类的实例,如下所示: 主要抽象类:

public abstract class Element{
    static enum elements{
         quad8{Element create(){return new ElementQuad2D();}};
         abstract Element create();
    }
    public static Element newElement (String name){
         el=elements.valueOf(name);
         return el.create();
    }
    public Element (String name, int nind, int nstress){
        this.name = name;
        /*Do Something Else*/
    }
}

子类:

class ElementQuad2D extends Element{
    public ElementQuad2D(){
    super("quad8",8,4);
    }
}

如何创建上述枚举类型,以便我可以根据 PYTHON 中的“quad8”等元素名称创建不同子类的实例?

【问题讨论】:

  • 为什么? 这似乎是一个 XY 问题。你到底想达到什么目的?您正在尝试采用 Java 设计模式并将其扔给 Python,并且可能有一种更简单的方法来完成您想要在这里实现的任何目标
  • 我想要实现的是,当我以名称为参数调用方法“newElement”时,比如“quad8”,我应该能够调用子类“ElementQuad2D()”的构造函数来自枚举“元素”。我当前在 Python 中的实现涉及一堆 if else 语句,如果我实现了许多这样的元素类型,这些语句就会有问题。我不想要确切的实现,但要接近这个。

标签: java python oop enums abstract-base-class


【解决方案1】:

这可以通过从字符串到类的字典轻松实现。子类的使用在这里不起作用:

class Element: pass

class ElementQuad2D(Element): pass

mapping = {'quad8': ElementQuad2D}
obj = mapping['quad8']()
print(obj)
#  <__main__.ElementQuad2D object at 0x01D70BD0>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 2022-11-09
    • 1970-01-01
    相关资源
    最近更新 更多