python中的多重继承与组合

python中的多重继承与组合,python,Python,我对OOP及其在Java中的习惯用法有很好的理解 现在我正在用python编码,我的处境是多重继承可能很有用,但是(这可能是由于多年的java代码),我不愿意这样做,我正在考虑使用组合而不是继承,以避免与潜在的相等方法名发生潜在冲突 问题是,我对这件事是过于严格还是过于关注java。或者在python中使用多重继承不仅是可能的,而且也是值得鼓励的 感谢您的时间:)我仍然更喜欢组合而不是继承,无论是多个还是单个。真正进入duck类型有点像到处都有大量隐式接口,所以在Python中根本不需要继承(或

我对OOP及其在Java中的习惯用法有很好的理解

现在我正在用python编码,我的处境是多重继承可能很有用,但是(这可能是由于多年的java代码),我不愿意这样做,我正在考虑使用组合而不是继承,以避免与潜在的相等方法名发生潜在冲突

问题是,我对这件事是过于严格还是过于关注java。或者在python中使用多重继承不仅是可能的,而且也是值得鼓励的


感谢您的时间:)

我仍然更喜欢组合而不是继承,无论是多个还是单个。真正进入duck类型有点像到处都有大量隐式接口,所以在Python中根本不需要继承(或抽象类)。但是这是更喜欢组合,而不是永远不要使用继承。如果继承(即使是多个)是一个很好的选择,而组合不是,那么就使用继承。

继承与组合的问题归结为试图解决可重用代码的问题。您不希望代码中到处都是重复的代码,因为这样做既不干净也不高效。继承通过在基类中创建一种隐含特性的机制来解决这个问题。Composition通过给您模块和简单调用其他类中的函数的能力来解决这个问题

如果这两种解决方案都解决了重用问题,那么哪种解决方案适用于哪种情况?答案是非常主观的,但我会给你我的三个指导原则,告诉你什么时候做:

  • 无论如何都要避免多重继承,因为它太复杂了,无法可靠地使用。如果你被它困住了,那么要准备好了解类的层次结构,并花时间寻找所有东西的来源
  • 使用组合将代码打包成在许多不同的不相关的地方和情况下使用的模块
  • 只有当有明确相关的可重用代码片段适合于一个公共概念时,或者由于您正在使用的某些东西而必须使用继承时,才使用继承
  • 但是,不要成为这些规则的奴隶。关于面向对象编程,需要记住的是,它完全是程序员为打包和共享代码而创建的一种社会惯例。因为这是一种社会惯例,但却是用Python编写的,您可能会因为与您一起工作的人而被迫避免这些规则。在这种情况下,找出他们如何使用东西,然后适应情况


    有关更多详细信息,请访问:

    在Python中,您必须处理名称冲突。顺便说一句,读+1到JBernardo,我同意。冲突的方法名并不是避免多重继承的原因,因为Python有一个非常干净、定义良好的“优先顺序”,在发生冲突时,该方法会被继承。只要确保你知道它是什么。这个链接在付费墙后面。点击诱饵?