python类inheritan的基本用法

2024-09-27 23:00:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚刚开始使用Python,并试图找出正确的方法来使用类。在

我的程序目前有两个类,分别称为Planner和{}。Planner与模型无关,因为它使用的任何Model都提供了一个一致的接口。因此,如果我想拥有几个不同的可用模型,它们应该继承的某些东西,以实现一致的接口。另外,一些模型类将共享功能。例如,单代理模型可以模拟一个代理,而双代理模型将模拟两个代理,每个代理的行为与单个代理相同。在

那么-我应该如何实现这一点/我需要什么语言特性?在

编辑:谢谢你的快速反应,让我对鸭子课有了更清晰的认识!所以,听起来我只会在想覆盖另一个Model功能的子集时使用继承?(对于我的doubleAgent,我可能只使用singleagent作为类成员?)在

我已经看了其他一些带有类似标记的问题,但它们似乎更关心语法而不是设计选择。我还查看了关于classes的官方Python文档,但没有找到我想要的东西。(可能是因为我没有足够的知识来认识它。)


Tags: 方法模型程序功能语言编辑代理model
3条回答

Python的优点之一(正如许多人所说的,它的弱点)是它不依赖于编译时类型检查来实施接口。这意味着不是需要一组对象从一个公共基类继承来拥有相同的接口-它们仍然可以在任何函数中互换使用。这种行为通常称为duck typing。在

事实上,因为Python是动态类型的,所以很难像您所说的那样“强制实现一致的接口”。因为这个原因,像zope.interface这样的东西已经被创建了。如果所有Model类型都实现了一些常见的行为,那么您将从您的实例中从类中获得的主要好处是代码重用。在

更进一步,如果您在第三方库中有一些不相关的对象类型,而您希望将其用作Model,那么您甚至可以执行称为"monkey patching" or "duck punching"的操作,以便添加提供Model接口所需的代码!在

在Python中,通常不会使用与静态类型化语言完全相同的OOP方法。具体来说,你并不需要一个对象来实现一个特定的接口或者从抽象基类派生等等。相反,该对象只需要能够执行所需的操作。这就是俗称的鸭子打字。如果它走起路来像鸭子,说话像鸭子,那么,不管怎么说,它都是鸭子。在

所以只需决定对象需要什么方法,并确保它们始终具有这些方法。如果希望在系统中的不同参与者之间共享实现,那么可以考虑类继承。但如果不是,那么您也可以实现不相交的类层次结构。在

基本上,您在Python中提供的类链接回答了关于继承的部分中的所有问题。 在您的例子中,只需定义一个名为Model的类,然后定义两个子类:singleAgent和doubleAgent:

class Model:
    pass

class singleAgent(Model):
    pass

如果您确实需要抽象类,请看一看“抽象基类”es:http://docs.python.org/library/abc.html

相关问题 更多 >

    热门问题