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() ...
随机推荐
- Android5.0之Toobar的使用
总体上来说,Toolbar的使用可以分为两个方面,一方面是将ToolBar当作ActionBar来用,另一方面就是将Toolbar当成一个单独的控件来用,不过到目前为止我见到的大部分情况都是把Tool ...
- 从源码角度深入理解LayoutInflater
关于LayoutInflater,在开发中经常会遇到,特别是在使用ListView的时候,这个几乎是必不可少.今天我们就一起来探讨LayoutInflater的工作原理. 一般情况下,有两种方式获得一 ...
- Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(一)
Spring更新到3.0之后,其MVC框架加入了一个非常不错的东西——那就是REST.它的开放式特性,与Spring的无缝集成,以及Spring框架的优秀表现,使得现在很多公司将其作为新的系统开发框架 ...
- Objective-C语法快速参考(C# 和 Objective-C 语法的比较)
大部分有一点其他平台开发基础的初学者看到XCode ,第一感想是磨拳擦掌,看到 Interface Builder 之后,第一感想是跃跃欲试,而看到Objective-C 的语法,第一感想就变成就望 ...
- Mysql+keeplived+lvs
最近要做个高可用的mysql.用mysql主主复制方式保证两台数据库的数据一致.结合lvs和keepalived一起使用(keepalived+lvs的设置会再另外一篇文章里写). 搭好环境之后,本人 ...
- 过滤所有的HTML标签
<script type="text/javascript"> var str = "<p style=color:#FF0000>恩恩,就是就是 ...
- 两个iframe之间传值
例如:点击后会把另一个iframe中的值得到弹出 Main: <html lang="en" xmlns="http://www.w3.org/1999/xhtml ...
- css placeholder 颜色设置
因为每个浏览器的CSS选择器都有所差异,所以需要针对每个浏览器做单独的设定(可以在冒号前面写input和textarea). ::-webkit-input-placeholder { /* WebK ...
- 读《编写高质量代码:改善JavaScript程序的188个建议》1
建议3:减少全局变量污染 定义全局变量有3种方式: ❑在任何函数外面直接执行var语句. var f='value'; ❑直接添加一个属性到全局对象上.全局对象是所有全局变量的容器.在Web浏览器中, ...
- 关于Handler与异步消息处理循环的摘抄
Message:消息,其中包含了消息ID,消息处理对象以及处理的数据等,由MessageQueue 统一队列,终由Handler处理. Handler:处理者,负责Message的发送及处理.使用Ha ...