有些类需要编号但不需要编制索引,因此将它们混合在一起并不是一个好主意.
困境是,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
解决方法
should
WithIndexing
inherit from WithAutoNumbering
正如你所说,WithIndexing使用WithAutoNumbering.这是一个有趣的课程,根本不能单独使用;并且通过继承WithAutoNumbering,WithIndexing可以覆盖WithAutoNumbering成员.
通常,每个级别更容易覆盖上面找到的方法,您将其设置为单个继承的次数越多.
但是,如果你选择设计另一种方式(这样你需要从两者继承以使一个类能够使用WithIndexing),你可能会完全没问题,直到覆盖WithAutoNumbering中找到的方法.在这种情况下,类在基本列表中出现的顺序可能会影响它们的MRO顺序,在这种情况下,您可能会得到令人惊讶的结果.如果你需要以这种方式影响MRO的力量,你应该让每个mixin继承自object.但是你可能不需要那样做.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。