0. 子类是否自动调用父类的构造方法

  • C++、Java 会在子类对象的构造中自动首先调用父类的构造;
  • Python 则相对啰嗦一点:
    • 如果子类不覆盖父类的_init_()方法,则子类默认将执行与父类一样的初始化方法;
    • 但是假如子类自己重写了(也成为覆盖)父类的_init_()方法,那么就需要显式的调用父类的初始化方法了。

1. __init__ 与 __new__

class Person(object):"""Silly Person"""def __new__(cls, name, age):print '__new__ called.'return super(Person, cls).__new__(cls, name, age)def __init__(self, name, age):print '__init__ called.'self.name = nameself.age = agedef __str__(self):return '<Person: %s(%s)>' % (self.name, self.age)if __name__ == '__main__':piglei = Person('piglei', 24)print piglei
  • __new__的调用先于 __init__ 方法;
  • __new__ 方法负责创建一个实例对象,__init__ 方法负责将该实例对象进行初始化。
  • __new__方法正是创建这个类实例的方法,返回的对象正是 __init__ 的 self 参数;
  • __init__ 用于实例化对象,__new__用于继承,是类别级的方法;

2. __new__ 的应用场景

  • __new__方法主要是当你继承一些不可变的class时(比如int, str, tuple), 提供给你一个自定义这些类的实例化过程的途径

    class PositiveInt(int):def __init__(self, value):return super(PositiveInt, self).__init__(self, abs(value))
    class PositiveInt(int):def __new__(cls, value):return super(PositiveInt, cls).__new__(cls, abs(value))
    

  • https://www.cnblogs.com/slhs/p/7717045.html
  • https://www.cnblogs.com/ifantastic/p/3175735.html

Python 面向对象 —— __init_ 与 __new__相关推荐

  1. 第八课.Python面向对象(二)

    类的继承和多态 继承和多态与函数有共同的目的,都是为了减少代码的冗余,提高复用的效率: 根据"Python面向对象(一)"的笔记,我现在定义一个Cinema类: #父类 class ...

  2. 关于python面向对象编程中、下列说法中_关于Python面向对象编程的知识点总结

    前言 如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程. 接下来我们 ...

  3. python面向对象编程的三大特性_Python面向对象总结及类与正则表达式详解

    Python3 面向对象 -------------------------------------------------------------------------------- 一丶面向对象 ...

  4. Python面向对象中反射和双下的正确用法

    一.反射 反射:程序可以访问,检测和修改它本身状态或行为的一种能力(自省) python面向对象中的反射:通过字符串的形式操作对象相关的属性 python中的一切事物都是对象(都可以使用反射) 四个可 ...

  5. Python面向对象反射,双下方法

    一. 反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序 ...

  6. 【Python】学习笔记总结2(Python面向对象)

    文章目录 二.Python面向对象 1.类(Class) 1.1.定义类 1.2.类属性 1.3.实例属性 1.3.1.内部添加 1.3.2.外部添加 1.4.实例方法 1.5.类方法 1.6.静态方 ...

  7. python 面向对象之:反射,双下方法

    函数vs 方法 # 1 通过函数名可以大致判断 # print(func) # <function func at 0x00000000005D1EA0> 函数 # obj = A() # ...

  8. python 面向对象(进阶篇)

    上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个" ...

  9. Python 面向对象之双下方法,内置函数

    isinstance和issubclass isinstance(obj,cls)      # 检查是否obj是否是类 cls 的对象 class Foo(object):passobj = Foo ...

最新文章

  1. Windows server用好windows server backup,发挥个人电脑该有的系统还原功能
  2. 【三分+枚举】LNOI2017 d1t1 期末考试
  3. Sql注入工具php,phpcms框架SQL注入--基于Havij工具
  4. ubuntu 系统分配固定 ip--
  5. mysql树节点【所有子节点列表 and 查询所有父节点列表】
  6. Control Registers(CR0, CR1, CR2, CR3, and CR4)
  7. 【转】学习理论,注重细节
  8. Spring Boot 2 - 初识与新工程的创建
  9. 服务器硬盘安装win10系统,硬盘安装win10的方法
  10. 【亲测可用】彻底解决Google谷歌地球启动无法连接到登录服务器、无法启动问题
  11. 计蒜课:Fantastic Graph(图论)(有源汇的上下界的可行流)
  12. C/C++ libcurl CURLOPT_NOSIGNAL选项
  13. Android自定义弹窗模仿微信,Android 仿微信朋友圈点赞和评论弹出框功能
  14. 基于SSM的家政服务管理系统
  15. Microsoft Word 教程:如何在 Word 中更改页面方向、为页面添加边框?
  16. Web安全——文件上传漏洞
  17. 对自己大学的期望与目标
  18. Cheat Engine 小白教程(大白话教学)上篇
  19. unity网络实战开发(丛林战争)-前期知识准备(003-开发服务器端的发送数据和接收数据)
  20. MATLAB案例-汽车雷达

热门文章

  1. oracle服务器文件路径,ORACLE 数据库如何通过修改数据文件路径进行数据迁移
  2. Spark Streaming保存到HDFS目录中案例
  3. linux 信号集 同步,linux信号集
  4. 测试学习java_使用Junit测试框架学习Java
  5. Linux中JDK安装配置(CentOS7)
  6. u-boot之u-boot.bin的生成
  7. 一些关于OTA的相当不错的网站和资料
  8. Python豆瓣书籍信息爬虫
  9. 洛谷—— P1847 轰炸II
  10. react+react-router 4.0+redux 构建购物车实战项目