【发布时间】:2018-01-08 11:15:19
【问题描述】:
我有一个基类BaseClass 和多个子类SubClass1、SubClass2。实际上,该程序仅适用于其中一个子类的实例。子类使用save 方法实现接口。加载保存的元素时,您不知道要加载的类。因此,我正在考虑在基类中使用 load 方法,但这提出了一个问题:如何从基类中的子类之一实例化元素?
For clarity, here is some simple code:
class BaseClass:
def load(self):
#load element of subclass
return subclass_element
class myInterface:
__metaclass__ = ABCMeta
@abstractmethod
def save(self):
raise NotImplementedError
class SubClass1(BaseClass, myInterface):
def save(self):
#save the element
class SubClass2(BaseClass, myInterface):
def save(self):
#save the element
我也愿意接受任何支持不同设计的建议。我不确定我没有实施反模式。
编辑 1:添加工厂类
根据我对@Vishal_Raja 和@Gholamali-Irani 建议的理解:
class SubClassLoader: #this is our factory class
registered_subclasses = {} #static dict of subclasses
@StaticMethod
def register(classname, class):
SubClassLoader.registered_subclasses[classname] = class
@StaticMethod
def get_instance(filepath):
classname, arguments = get_classname(filepath)
if classname in SubClassLoader.registered_subclasses:
return SubClassLoader.registered_subclasses[classname](arguments)
else:
raise TypeError("Unknown class %s" % classname)
class BaseClass:
pass
class myInterface:
__metaclass__ = ABCMeta
@abstractmethod
def save(self):
raise NotImplementedError
class SubClass1(BaseClass, myInterface):
def save(self):
#save the element
class SubClass2(BaseClass, myInterface):
def save(self):
#save the element
【问题讨论】:
-
这是关于一般的 OOP,还是专门针对 Python?
-
Python 上下文中的通用 OOP
-
但主要是一般的OOP
标签: oop inheritance design-patterns