Python 面向对象 —— __init_ 与 __new__
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__相关推荐
- 第八课.Python面向对象(二)
类的继承和多态 继承和多态与函数有共同的目的,都是为了减少代码的冗余,提高复用的效率: 根据"Python面向对象(一)"的笔记,我现在定义一个Cinema类: #父类 class ...
- 关于python面向对象编程中、下列说法中_关于Python面向对象编程的知识点总结
前言 如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程. 接下来我们 ...
- python面向对象编程的三大特性_Python面向对象总结及类与正则表达式详解
Python3 面向对象 -------------------------------------------------------------------------------- 一丶面向对象 ...
- Python面向对象中反射和双下的正确用法
一.反射 反射:程序可以访问,检测和修改它本身状态或行为的一种能力(自省) python面向对象中的反射:通过字符串的形式操作对象相关的属性 python中的一切事物都是对象(都可以使用反射) 四个可 ...
- Python面向对象反射,双下方法
一. 反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序 ...
- 【Python】学习笔记总结2(Python面向对象)
文章目录 二.Python面向对象 1.类(Class) 1.1.定义类 1.2.类属性 1.3.实例属性 1.3.1.内部添加 1.3.2.外部添加 1.4.实例方法 1.5.类方法 1.6.静态方 ...
- python 面向对象之:反射,双下方法
函数vs 方法 # 1 通过函数名可以大致判断 # print(func) # <function func at 0x00000000005D1EA0> 函数 # obj = A() # ...
- python 面向对象(进阶篇)
上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个" ...
- Python 面向对象之双下方法,内置函数
isinstance和issubclass isinstance(obj,cls) # 检查是否obj是否是类 cls 的对象 class Foo(object):passobj = Foo ...
最新文章
- Windows server用好windows server backup,发挥个人电脑该有的系统还原功能
- 【三分+枚举】LNOI2017 d1t1 期末考试
- Sql注入工具php,phpcms框架SQL注入--基于Havij工具
- ubuntu 系统分配固定 ip--
- mysql树节点【所有子节点列表 and 查询所有父节点列表】
- Control Registers(CR0, CR1, CR2, CR3, and CR4)
- 【转】学习理论,注重细节
- Spring Boot 2 - 初识与新工程的创建
- 服务器硬盘安装win10系统,硬盘安装win10的方法
- 【亲测可用】彻底解决Google谷歌地球启动无法连接到登录服务器、无法启动问题
- 计蒜课:Fantastic Graph(图论)(有源汇的上下界的可行流)
- C/C++ libcurl CURLOPT_NOSIGNAL选项
- Android自定义弹窗模仿微信,Android 仿微信朋友圈点赞和评论弹出框功能
- 基于SSM的家政服务管理系统
- Microsoft Word 教程:如何在 Word 中更改页面方向、为页面添加边框?
- Web安全——文件上传漏洞
- 对自己大学的期望与目标
- Cheat Engine 小白教程(大白话教学)上篇
- unity网络实战开发(丛林战争)-前期知识准备(003-开发服务器端的发送数据和接收数据)
- MATLAB案例-汽车雷达