【发布时间】:2014-09-23 15:21:43
【问题描述】:
我有一个名为WithAutoNumbering 的混合类,用于需要对给定属性进行特殊编号的类。除此之外,对于那些需要索引功能的类,我有一个名为 WithIndexing 的不错的类混合......它需要 WithAutoNumbering 的功能。
有些类需要编号但不需要索引,因此将它们混合在一起并不是一个好主意。
难题是,应该WithIndexing 继承自WithAutoNumbering? 还是每个需要WithIndexing 的类也应该继承自WithAutoNumbering?
即这个,CoolClass 是必须实现索引的:
class WithAutoNumbering(object):
...
class WithIndexing(WithAutoNumbering):
...
class CoolClass(WithIndexing):
...
或者这个
class WithAutoNumbering(object):
...
class WithIndexing(object):
...
class CoolClass(WithIndexing, WithAutoNumbering):
...
一方面,第一种方法更简洁,并确保您不能尝试使用WithIndexing 而没有WithAutoNumbering。另一方面,我一直读到(并且觉得它很受欢迎)mix-ins 不应该有层次结构,即只从object 继承,以避免整个类层次结构的意大利面条化与无法理解的__mro__s
【问题讨论】:
-
这个问题可能更适合programmers.stackexchange.com
-
@ColonelThirtyTwo 当然不是。这是一个技术问题。
-
@Marcin 真的吗? OP 似乎在问“哪个是更好的设计选择?”这不是programmers.se的主要话题之一吗?
-
@ColonelThirtyTwo 不,他们在问如何在python中设计这个。应用面向对象设计的宗教概念会严重误导。
-
@Marcin 这个问题肯定适用于任何其他带有 mixins 的语言?它似乎不是特定于 python 的。
标签: python inheritance multiple-inheritance mixins