Java 使用enum在python中创建子类的新实例
我有以下Java代码,其中使用enum数据类型创建基类的实例,如下所示: 主要抽象类:Java 使用enum在python中创建子类的新实例,java,python,oop,enums,abstract-base-class,Java,Python,Oop,Enums,Abstract Base Class,我有以下Java代码,其中使用enum数据类型创建基类的实例,如下所示: 主要抽象类: public abstract class Element{ static enum elements{ quad8{Element create(){return new ElementQuad2D();}}; abstract Element create(); } public static Element newElement (String
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”?这可以通过从字符串到类的字典轻松实现。子类的使用在这里不起作用:
class Element: pass
class ElementQuad2D(Element): pass
mapping = {'quad8': ElementQuad2D}
obj = mapping['quad8']()
print(obj)
# <__main__.ElementQuad2D object at 0x01D70BD0>
class元素:pass
类ElementQuad2D(元素):通过
映射={'quad8':ElementQuad2D}
obj=映射['quad8']()
打印(obj)
#
为什么?这似乎是一个XY问题。你到底想达到什么目的?您正在尝试采用Java设计模式并将其扔给Python,可能有一种更简单的方法来实现您在这里尝试实现的任何功能。我想要实现的是,当我以名称作为参数调用方法“newElement”时,比如“quad8”,我应该能够调用子类“ElementQuad2D()”的构造函数从枚举“元素”。我目前在Python中的实现涉及到一堆if-else语句,如果我实现了许多这样的元素类型,那么这些语句就会有问题。我不想要精确的实现,但要接近这一点。