python 中的特殊方法,纠正自己笨笨的记忆
1. __new__ 和 __init__ 的区别
- python 2.x 老式类(默认继承type)
class A:
pass
- 老式类中没有__new__类方法(也就是说定义也不会执行,它不是老式类的类方法),__Init__ 作为构造函数,创建实例对象,并初始化。
- 过程: 类 => __init__() => 实例(self)创建并初始化
- __init__: 不能有返回值
- python 3 和 python 2.x(显示继承新式类)
class A(object):
pass
注: 在Python 3.x中没有新式类和老式类之分,它们都继承自'object' 类。因此可以不用显示地指定其基类。'object'基类中拥有的方法和属性可通用于所有的新式类。
- __new__ 为类方法,__init__ 为实例方法。__new__ 类方法创建实例对象,__init__ 实例方法初始化实例对象。
- 过程: 类 => __new__() => 实例对象 => __init__() => 初始化实例
- __init__ 不能有返回值,__new__ 必须有返回值且 object.__new__(cls) 或 super(类名, cls).__new__(cls),否则__init__ 不执行, object 与 super() 的区别:是否调用父类响应的方法
- __new__ 的返回值的object.__new__(cls)中不能有多余的参数,比如: super(cls, cls).__new__(cls, *arg, **kwargs) 或 super().__new__(cls, *arg, **kwargs), *arg, **kwargs 添加应用__init__一致, super() 中的参数要不2个,要不没有
class A(object):
def __init__(self):
print "A.__init__ called" # -> is actually never called def __new__(cls):
print "A.__new__ called"
# return super(cls, cls).__new__(cls) # return object.__new__(cls) # 此两种会执行 __init__
print A()
2. __get__, __getattr__, __getattribute__ 的区别
- 均是访问属性的方法,注意是属性
- __getattr__(self, name) 当访问属性无法找到时,默认异常,可以自定义其返回值或者 AttributeError 异常
- __getattribute__(self, name): 2.7 在新式类中引入,如果定义,则无条件执行,如果实行不存在时,也不执行 __getattr__(相当于被屏蔽掉)
- __get__ (self, instance, owner) : 如果class定义了它,则这个class就可以称为descriptor。owner是所有者的类,instance是访问descriptor的实例,如果不是通过实例访问,而是通过类访问的话,instance则为None。(descriptor的实例自己访问自己是不会触发__get__,而会触发__call__,只有descriptor作为其它类的属性才有意义。)
python 中的特殊方法,纠正自己笨笨的记忆的更多相关文章
- Python中的__new__()方法与实例化
@Python中的__new__()方法与实例化 __new__()是在新式类中新出现的方法,它作用在构造方法建造实例之前,可以这么理解,在Python 中 存在于类里面的构造方法__init__ ...
- python中的replace()方法的使用
python中的replace()方法的使用 需求是这样的:需要将字符串的某些字符替换成其他字符 str.replace(old,new,max) 第一个参数是要进行更换的旧字符,第二个参数是新的子串 ...
- Python中的字符串方法
Python中的字符串方法 字符串类即str提供了许多有用的方法来操纵字符串.具体来说,我们将讨论如下的方法. 搜索字符串内的子字符串. 测试字符串. 格式字符串. 转换字符串. 回顾前面的章节,方法 ...
- python中的sort方法
Python中的sort()方法用于数组排序,本文以实例形式对此加以详细说明: 一.基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不 ...
- python中的sort方法使用详解
Python中的sort()方法用于数组排序,本文以实例形式对此加以详细说明: 一.基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不 ...
- Python中格式化format()方法详解
Python中格式化format()方法详解 Python中格式化输出字符串使用format()函数, 字符串即类, 可以使用方法; Python是完全面向对象的语言, 任何东西都是对象; 字符串的参 ...
- 关于python中的特殊方法
研究了几个小时,大概对python中的特殊方法一知半解,现在写写自己的理解,以及记录一些找到的资源.待自己有比较深入理解的时候,再来更新 https://docs.python.org/3/refer ...
- Python中使用item()方法遍历字典的例子
Python中使用item()方法遍历字典的例子 这篇文章主要介绍了Python中使用item()方法遍历字典的例子,for...in这种是Python中最常用的遍历字典的方法了,需要的朋友可以参考下 ...
- Python中的open()方法总结
总结Python中的open()方法 message= {'企业即时通信': 'aaa', '企业名称': 'bbb'} with open("..\\r.txt", " ...
随机推荐
- 在C#应用程序中,利用表值参数过滤重复,批量向数据库导入数据,并且返回重复数据
在很多情况下,应用程序都需要实现excel数据导入功能,数据如果只有几十条,或上百条,甚至上千条,速度还好. 但是不仅如此,如果客户提供给你的excel本身存在着重复数据,或是excel中的某些数据已 ...
- springmvc入门之HelloWorld篇
springmvc是一个基于spring的mvc框架,各种优点啥的用过就知道了.下面开始讲HelloWorldController的实现. 1.开发环境搭建<导jar包+配置文件> 1.1 ...
- 在centos上安装smplayer播放器
Smplayer是一个非常好用的媒体播放器.可以支持大部分的视频和音频文件.它支持音频轨道切换.允许调节亮度.对比度.色调.饱和度.伽玛值,按照倍速.4倍速等多种速度回放.还可以进行音频和字幕延迟调整 ...
- BZOJ1188:[HNOI2007]分裂游戏(博弈论)
Description 聪聪和睿睿最近迷上了一款叫做分裂的游戏.该游戏的规则试:共有n个瓶子,标号为0,1,2.....n-1,第i个瓶子中装有p[i]颗巧克力豆,两个人轮流取豆子,每一轮每人选择3个 ...
- 1934. [SHOI2007]善意的投票【最小割】
Description 幼儿园里有n个小朋友打算通过投票来决定睡不睡午觉.对他们来说,这个问题并不是很重要,于是他们决定发扬谦让精神.虽然每个人都有自己的主见,但是为了照顾一下自己朋友的想法,他们也可 ...
- istio 配置解读
Istio在服务网络中统一提供了许多关键功能: 流量管理:控制服务之间的流量和API调用的流向,使得调用更可靠,并使网络在恶劣情况下更加健壮. 可观察性:了解服务之间的依赖关系,以及它们之间流量的本质 ...
- Python之Bottle框架使用
本文主要包含的内容是Bottle框架介绍和安装使用. 一.Bottle框架介绍 Bottle是一个快速小巧,轻量级的 WSGI 微型 web 框架.同时Bottle也是一个简单高效的遵循WSGI的微型 ...
- Oracle 表单的创建
1.-- 连接 conn hu/aaa; -- 创建表空间 Create tablespace computer2005 nologging datafile 'd:/Oracle/product/1 ...
- Threadpool python3
from concurrent.futures import ThreadPoolExecutor,ALL_COMPLETED,wait,as_completedimport time def add ...
- Spring源码分析(八)AbstractBeanDefinition属性
摘要:本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 在上一篇中已经完成了XML文档到GenericBeanDefiniton ...