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

我问这个问题,因为有一个子类从一个或多个类继承,提供一些不错的默认行为(比如从Python继承字典,以便obj [‘key’]适用于新的对象)类).但是,允许子类完全像字典一样使用并不总是自然或简单的:有时候构造函数参数只与特定用户子类相关(例如,代表一组串行端口的类)更好可能希望表现得像端口[‘usb1’]是USB端口#1等字典.这种情况的推荐方法是什么?具有与其基类完全兼容的子类构造函数,并通过对象工厂函数生成实例,该函数采用简单,用户友好的参数?或者只是编写一个类构造函数,其参数集不能直接赋予其基类的构造函数,但从用户角度来看哪个更合乎逻辑?

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

解决方法:

根据要求,我发布了以前作为评论的回答.

链接的维基百科文章中定义的原则是“如果S是T的子类型,那么类型T的对象可以用类型S的对象替换”.它不会读取“子类应该以与其基类相同的方式运行”.在考虑构造函数时,差异很重要:维基百科版本仅讨论子类型的对象,而不是类型本身.对于一个对象,已经调用了构造函数,因此该原则不适用于构造函数.这也是我应用它的方式,以及它在标准库中的应用方式(例如defaultdict和dict).

多重继承中的构造函数可能无法以语言无关的方式进行讨论.在Python中,有两种方法.如果您的继承图包含菱形图案,并且您需要确保所有构造函数只被调用一次,则应使用super()并遵循Raymond Hettinger的文章Python’s super() considered super“实用建议”部分中描述的模式.如果您没有钻石(包括对象的钻石除外),您还可以对所有基类构造函数使用显式基类调用.

标签:python,oop,constructor,liskov-substitution-principle

python中构造方法可以被继承吗_python – 类继承:构造函数应该兼容吗?多重继承的情况?...相关推荐

  1. python中urframe函数的用法_python类中的内置函数

    __init__(): __init__方法在类的一个对象被建立时,马上运行.这个方法可以用来对你的对象做一些你希望的初始化.注意,这个名称的开始和结尾都是双下划线. 代码例子: #!/usr/bin ...

  2. python中构造方法可以被继承吗_构造函数是在python中继承的吗

    我正在研究麻省理工学院6.00开放式课程的一个习题集,我有以下代码...在class Trigger(object): def evaluate(self, story): ""& ...

  3. python中property魔法方法原理_Python类中的魔法方法之 __slots__原理解析

    在类中每次实例化一个对象都会生产一个字典来保存一个对象的所有的实例属性,这样非常的有用处,可以使我们任意的去设置新的属性. 每次实例化一个对象python都会分配一个固定大小内存的字典来保存属性,如果 ...

  4. python中静态变量和静态方法_python类和函数中使用静态变量的方法

    本文实例讲述了python类和函数中使用静态变量的方法.分享给大家供大家参考.具体分析如下: 在python的类和函数(包括λ方法)中使用静态变量似乎是件不可能[Nothing is impossib ...

  5. python中构造方法 id自增_Python+MongoDB自增键值的简单实现

    背景 最近在写一个测试工具箱,里面有一个bug记录系统,因为后台我是用Django和MongoDB来实现的,就遇到了一个问题,要如何实现一个自增的字段. 传统的关系型数据库要实现起来是非常容易,只要直 ...

  6. python中类方法与实例方法的区别-Python中的对象,方法,类,实例,函数用法分析...

    本文实例分析了Python中的对象,方法,类,实例,函数用法.分享给大家供大家参考.具体分析如下: Python是一个完全面向对象的语言.不仅实例是对象,类,函数,方法也都是对象. class Foo ...

  7. [转载] python中for语句用法_详解Python中for循环的使用_python

    参考链接: 在Python中将else条件语句与for循环一起使用 这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 &q ...

  8. python中最基本的系列_Python中最基本的10个内容

    Python简单易学,但又博大精深.许多人号称精通Python,却不会写Pythonic的代码,对很多常用包的使用也并不熟悉.学海无涯,我们先来了解一些Python中最基本的内容. Python的特点 ...

  9. python中str是什么函数_python里的str是什么函数

    python里的str是什么函数 发布时间:2020-05-18 11:39:40 来源:亿速云 阅读:280 作者:小新 今天小编给大家分享的是python里的str是什么函数,相信很多人都不太了解 ...

最新文章

  1. 8种方案解决重复提交问题!
  2. ASP.NET一般处理程序新建一个方法里使用context.Response.Write的解决方法
  3. WPF模板(二)应用
  4. 外来Slackware包管理工具[转]
  5. bigdecimal取小数部分_Java中BigDecimal保留两位小数点有哪些方法
  6. 【java】将PDF转成字符串
  7. BugkuCTF-MISC题zip伪加密
  8. 蔚来2018年平均每天亏掉2641万,车辆交付预期环比腰斩
  9. ADS仿真过孔阻抗(via designer)
  10. EAN13条形码生成器
  11. 再也不用手写爬虫了!推荐5款自动爬取数据的神器!
  12. html抓取cpu温度,一种获取CPU温度的测试方法、系统及计算机存储介质与流程
  13. CAS号:2417213-21-7以(ZPS-PVPA)为催化剂载体
  14. 对list的一些常用操作
  15. 新能源车牌识别SDK核心算法不断更新
  16. IT开发工程师的五个等级,你现在几级?
  17. 企业数字化转型是否缺少部落知识?
  18. SHA 和 RSA 的区别
  19. 从云技术风向标看2022企业数字化转型战略方向
  20. 「硬见小百科」一文读懂电子元器件

热门文章

  1. 异常处理——上传文件到HDFS,put: `.': No such file or directory
  2. C语言二维数组、参数传递的理解
  3. Spring Boot JPA中关联表的使用
  4. gdb常用命令及参考文档
  5. Hadoop2异常分析(二):Sqoop导出数据错误
  6. GTS--阿里巴巴分布式事务全新解决方案
  7. hdu 1569 方格取数(2) 最大点权独立集
  8. 【含义解析】%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %m%n
  9. 蓝桥杯 试题 基础练习 龟龟龟龟龟兔赛跑预测——18行代码AC
  10. 人们常说的微型计算机简称为 机,(精华版)国家开放大学电大专科《计算机文化基础》网络课单项选择题题库及答案...