通过调用超类python创建子类

时间:2016-01-29 23:16:18

标签: python inheritance subclass superclass super

我有一个项目,我们正在尝试为几个python GIS库创建一个更简单的界面。基于我们期望的设计模式,我们希望用户仅在不知道子类的内部工作的情况下使用/引用超类方法。

基于传递给超类构造函数的文件路径扩展,是否可以创建子类,然后通过子类处理用户对超级方法的调用?

换句话说,如果用户想要制作并与汽车互动,他们是否可以为汽车类提供法拉利的蓝图并让汽车“超类”参考Ferarri“子类”方法?

在设计原则方面,这似乎有些落后。

1 个答案:

答案 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)