gpt4 book ai didi

python - 通过调用父类(super class)python创建子类

转载 作者:太空宇宙 更新时间:2023-11-03 16:59:46 25 4
gpt4 key购买 nike

我有一个项目,我们正在尝试为几个 python GIS 库创建一个更简单的界面。根据我们所需的设计模式,我们希望用户仅使用/引用父类(super class)方法,而不了解子类的内部工作原理。

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

换句话说,如果用户想要制作汽车并与之交互,他们可以为汽车类提供法拉利的蓝图,并让汽车“父类(super class)”引用法拉利“子类”方法吗?

这在设计原则方面似乎有点倒退。

最佳答案

听起来很像您想要工厂模式:

In object-oriented programming (OOP), a factory is an object for creating other objects – formally a factory is a function or method that returns objects of a varying prototype or class.

但是您不应该将功能放在 Car 的构造函数中。在你的例子中 Car 只是多种不同汽车的通用接口(interface)。因此,接口(interface)不必了解有关实现的任何信息,其中包括子类的名称。

使用一个简单的函数来实例化对象会更好:

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)

关于python - 通过调用父类(super class)python创建子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35095832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com