我有一个项目,我们正在尝试为几个python GIS库创建一个更简单的界面。基于我们期望的设计模式,我们希望用户仅在不知道子类的内部工作的情况下使用/引用超类方法。
基于传递给超类构造函数的文件路径扩展,是否可以创建子类,然后通过子类处理用户对超级方法的调用?
换句话说,如果用户想要制作并与汽车互动,他们是否可以为汽车类提供法拉利的蓝图并让汽车“超类”参考Ferarri“子类”方法?
在设计原则方面,这似乎有些落后。
答案 0 :(得分:1)
这听起来很像你想要的工厂模式:
在面向对象编程(OOP)中,工厂是一个对象 创建其他对象 - 正式工厂是一种功能或方法 返回不同原型或类的对象。
但是你不应该将功能放在Car
的构造函数中。在您的情况下,Car
只是许多不同车型的通用界面。因此,接口不应该知道有关实现的任何信息,包括子类的名称。
使用一个实例化对象的简单函数会好得多:
class Car(object):
pass
class Ferrari(Car):
pass
class Volkswagen(Car):
pass
def car_factory(blueprint, *args, **kwargs):
if blueprint == "Ferrari":
return Ferrari(*args, **kwargs)
if blueprint == "Volkswagen":
return Volkswagen(*args, **kwargs)
或只是
def car_factory(blueprint, *args, **kwargs):
cars = {"Ferrari":Ferrari,
"Volkswagen":Volkswagen}
return cars[blueprint](*args, **kwargs)