gpt4 book ai didi

python - 类继承: should constructors be compatible?多重继承的情况?

转载 作者:太空狗 更新时间:2023-10-30 03:06:15 25 4
gpt4 key购买 nike

<分区>

recommended principles of object-oriented programming 之一是Liskov substitution principle : 子类的行为应该与其基类相同(警告:这实际上不是对 Liskov 原则的正确描述:请参阅 PS)。

是否建议它也适用于构造函数?我主要想到的是 Python 及其 __init__() 方法,但这个问题适用于任何具有继承性的面向对象语言。

我问这个问题是因为让一个子类继承自一个或多个提供一些良好默认行为的类有时很有用(例如从字典继承,在 Python 中,这样 obj['key'] 适用于新类的对象)。然而,允许子类完全像字典一样使用并不总是自然或简单:构造函数参数仅与特定用户子类相关(例如,表示一组串行端口的类)有时会更好可能想要表现得像一本字典,其中 ports['usb1'] 是 USB 端口 #1,等等)。对于这种情况,推荐的方法是什么?拥有与其基类完全兼容的子类构造函数,并通过采用简单、用户友好参数的对象工厂函数生成实例?或者简单地编写一个类构造函数,其参数集不能直接提供给其基类的构造函数,但从用户的角度来看哪个更符合逻辑?

PS:我误解了上面的 Liskov 原则:Sven 在下面的评论指出了一个事实,即子类的对象应该表现得像父类(super class)的对象(子类本身不必表现得像父类(super class);特别是,它们的构造函数不必具有相同的参数[签名])。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com