加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python混合类应该只从对象继承吗?

发布时间:2020-12-20 13:43:52 所属栏目:Python 来源:网络整理
导读:我有一个名为WithAutoNumbering的混合类,用于需要给定属性的特殊编号的类.从那里我有一个很好的类混合,称为WithIndexing,用于那些需要索引功能的类……需要WithAutoNumbering的功能. 有些类需要编号但不需要编制索引,因此将它们混合在一起并不是一个好主意.
我有一个名为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):
    ...

一方面,第一种方法是更多的succint,并确保你不能尝试使用WithIndexing而不使用WithAutoNumbering.另一方面,我总是阅读(并且发现它同意)混合不应该具有层次结构,即仅从对象继承,以避免整个类层次结构的碎化与不可理解的__mro__s

解决方法

选择mixins继承的是你的选择会影响使用这些mixin的类的最终MRO.

should WithIndexing inherit from WithAutoNumbering

正如你所说,WithIndexing使用WithAutoNumbering.这是一个有趣的课程,根本不能单独使用;并且通过继承WithAutoNumbering,WithIndexing可以覆盖WithAutoNumbering成员.

通常,每个级别更容易覆盖上面找到的方法,您将其设置为单个继承的次数越多.

但是,如果你选择设计另一种方式(这样你需要从两者继承以使一个类能够使用WithIndexing),你可能会完全没问题,直到覆盖WithAutoNumbering中找到的方法.在这种情况下,类在基本列表中出现的顺序可能会影响它们的MRO顺序,在这种情况下,您可能会得到令人惊讶的结果.如果你需要以这种方式影响MRO的力量,你应该让每个mixin继承自object.但是你可能不需要那样做.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读