python中的__init__ 、__new__、__call__等内置函数的剖析
1.__new__(cls, *args, **kwargs)
创建对象时调用,返回当前对象的一个实例;注意:这里的第一个参数是cls即class本身
2.__init__(self, *args, **kwargs)
创建完对象后调用,对当前对象的实例的一些初始化,无返回值,即在调用__new__之后,根据返回的实例初始化;注意,这里的第一个参数是self即对象本身【注意和new的区别】
3.__call__(self, *args, **kwargs)
如果类实现了这个方法,相当于把这个类型的对象当作函数来使用,相当于 重载了括号运算符
#__conding:utf-8__ class Person:
def __init__(self, name):
self.name = name
def sayHi(self):
print("Hello my name is:%s" %self.name) p = Person("wuyanlong")
p.sayHi() class P(object):
def __init__(self, *args, **kwargs):
print "init"
super(P,self).__init__(*args, **kwargs)
def __new__(cls, *args, **kwargs):
print "new", cls
return super(P, cls).__new__(cls ,*args, **kwargs)
def __call__(self, *args, **kwargs):
print "call" pp = P()
print "__________"
pp()
运行结果:
***:~/Python爬虫/class$ python calss1.py
Hello my name is:wuyanlong
new <class '__main__.P'>
init
__________
call
4. __getattr__:
从对象中读取某个属性时,首先需要从self.__dicts__中搜索该属性,再从__getattr__中查找。
class A(object):
def __init__(self):
self.name = 'from __dicts__: zdy' def __getattr__(self, item):
if item == 'name':
return 'from __getattr__: zdy'
elif item == 'age':
return 26 a = A()
print a.name # 从__dict__里获得的
print a.age # 从__getattr__获得的
5. __setattr__
class A(object):
def __setattr__(self, *args, **kwargs):
print 'call func set attr'
return object.__setattr__(self, *args, **kwargs)
6. __delattr__
函数式用来删除对象的属性:
class A(object):
def __delattr__(self, *args, **kwargs):
print 'call func del attr'
return object.__delattr__(self, *args, **kwargs)
python中的__init__ 、__new__、__call__等内置函数的剖析的更多相关文章
- Python中的__init__()和__call__()函数
Python中的__init__()和__call__()函数 在Python的class中有一些函数往往具有特殊的意义.__init__()和__call__()就是class很有用的两类特殊的函数 ...
- Python中的__init__,__call__
__init__函数 当一个类实例被创建时, __init__() 方法会自动执行,在类实例创建完毕后执行,类似构建函数.__init__() 可以被当成构建函数,不过不象其它语言中的构建函数,它并不 ...
- Python开发【第五篇】内置函数
abs() 函数返回数字的绝对值 __author__ = "Tang" a = -30 all() 函数用于判断给定的可迭代参数iterable中的所有元素是否都为True,如果 ...
- python基础语法20 面向对象5 exec内置函数的补充,元类,属性查找顺序
exec内置函数的补充 exec: 是一个python内置函数,可以将字符串的代码添加到名称空间中; - 全局名称空间 - 局部名称空间 exec(字符串形式的代码, 全局名称空间, 局部名称空间) ...
- python面向对象的基础语法(dir内置函数、self参数、初始化方法、内置方法和属性)
面相对象基础语法 目标 dir 内置函数 定义简单的类(只包含方法) 方法中的 self 参数 初始化方法 内置方法和属性 01. dir 内置函数(知道) 在 Python 中 对象几乎是无所不在的 ...
- python之装饰器、生成器、内置函数、JSON
一.装饰器: 装饰器,器在这里的意思是函数,也就是装饰函数.作用是给其他函数添加新功能,它可以不改变原有的函数,原来的函数和原来一模一样,什么都不需要改变,只需要在函数外部加上调用哪个装饰器就可以了, ...
- Python自动化运维之5、内置函数
python3.x内置函数 官网详解 一些例子:后期慢慢接触到再补充 # help() 详细查看某个类有那些方法或者方法的具体使用 >>> help(str) >>> ...
- Python基础学习参考(三):内置函数
一:内置函数 在第一篇文章中,我们简单的认识了一下print()函数和input()函数,也就是输入和输出,这些函数我们可以直接的调用,不要自己定义或者引入什么,对吧?想这样的函数就叫做内置函数.这里 ...
- 老男孩python学习自修第十一天【内置函数】
1.基本内置函数 help() 帮助文档 dir() 列出当前文件的所有变量和方法 vars() 列出当前文件的所有变量及其值 type() 返回变量的类型 id() 返回变量的内存地址 len() ...
随机推荐
- iOS开发中常用到的加密方式
1 base64 1.1 简介 Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码.它将需要编码的数据拆分成字节数组.以3个字节为一组.按顺序排列24位数据,再把这24位数据 ...
- 解锁Dagger2使用姿势(二) 之带你理解@Scope
关于Dagger2使用的基础如果你还不了解,可以参考我的上一篇文章解锁Dagger2使用姿势(一),这有助于你理解本篇文章. OK,我们在上篇文章介绍另外Dagger2使用过程中四个基本的注解,分别是 ...
- WebService 实现BS环境与BS环境传递参数,根据参数生成txt文档
客户端: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Client.as ...
- javascript-02
1.js的特点2.js的数据类型3.js运算符 4.js的全局变量 |-定义在函数体外部的变量 |-定义在函数体内部没有使用var声明 var和没有var声明变量的区别? |-var ...
- Unity3D 之武器系统冷却功能的实现方式
先上方法 //如果Fire1按钮被按下(默认为ctrl),每0.5秒实例化一发子弹 public GameObject projectile; public float fireRate = 0.5F ...
- 查看SQL server 2008 R2 的Service Package 版本号(同样适用于SQL Server 2005)
在SQL Server 中新建一个查询(new Query),然后输入下面的SQL脚本,即可看到当前的数据库的Service Package (补丁包)的版本号 select serverproper ...
- 手把手教你写电商爬虫-第四课 淘宝网商品爬虫自动JS渲染
版权声明:本文为博主原创文章,未经博主允许不得转载. 系列教程: 手把手教你写电商爬虫-第一课 找个软柿子捏捏 手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫 手把手教你写电商爬虫-第三课 ...
- http 请求头
HTTP Request的Header信息 1.HTTP请求方式 如下表: GET 向Web服务器请求一个文件 POST 向Web服务器发送数据让Web服务器进行处理 PUT 向Web服务器发送数据并 ...
- webstorm的默认project编码为系统编码GBK.
使用新的IDE,而不会设置,会给你带来灾难. 如下为我是用webstorm时遇到的文件编码问题. 纳闷很久,终于发现是IDE的设置问题. 参考
- HDU 4628 Pieces(DP + 状态压缩)
Pieces 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4628 题目大意:给定一个字符串s,如果子序列中有回文,可以一步删除掉它,求把整个序列删除 ...