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)  
时间: 2024-08-03 21:17:37

python中的__init__ 、__new__、__call__等内置函数的剖析的相关文章

Python中的__init__,__call__

__init__函数 当一个类实例被创建时, __init__() 方法会自动执行,在类实例创建完毕后执行,类似构建函数.__init__() 可以被当成构建函数,不过不象其它语言中的构建函数,它并不创建实例--它仅仅是你的对象创建后执行的第一个方法.它的目的是执行一些该对象的必要的初始 化工作.通过创建自己的 __init__() 方法,你可以覆盖默认的 __init__()方法(默认的方法什么也不做),从而能够修饰刚刚创建的对象__init__()需要一个默认的参数self,相当于this.

Python开发【第五篇】内置函数

abs() 函数返回数字的绝对值 __author__ = "Tang" a = -30 print(abs(a))# 30 all() 函数用于判断给定的可迭代参数iterable中的所有元素是否都为True,如果是则返回True,否则返回False 如果iterable的所有元素不为0.''".False或者iterable为空,all(iterable)返回True,否则返回False:注意 空列表 空元组 空字典 空字符串是True __author__ = &quo

python笔记5:装饰器、内置函数、json

装饰器 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象. 先看简单例子: def run(): time.sleep(1) print('run....') 现有一个新的需求,希望可以记录下函数的运行时间,需要在代码中计算时间的代码: def run(): start_time = time.time() time.sleep(1) print('run....') end_time = time.time() pr

Python自动化运维之5、内置函数

python3.x内置函数 一些例子:后期慢慢接触到再补充 # help() 详细查看某个类有那些方法或者方法的具体使用 >>> help(str) >>> help(str.strip) # dir() 快速查看某个类有那些方法或者方法的具体使用 >>> dir(str) >>> dir(str.strip) # int() 实例化数字类型,或将其他类型转换为数字类型,或各种进制转换为十进制 (1)实例化数字类型 >>&

python之路基础-(二)内置函数、函数、装饰器

内置函数 python内置了以下函数,可以根据情况来使用 一.数学相关函数 divmod():取商和余数 >>> divmod(99,10) (9, 9) abs():取绝对值 >>> abs(-10) 10 len():查看序列长度 >>>list = [11,22,33,44] >>>r = len(list) >>>print(r)4 二.功能相关函数chr():在ascii码表中根据数字找出对应的字母 >

python学习--装饰器、生成器、内置函数、json

这周学习了装饰器和生成器,写下博客,记录一下装饰器和生成器相关的内容. 一.装饰器 装饰器,这个器就是函数的意思,连起来,就是装饰函数,装饰器本身也是一个函数,它的作用是用来给其他函数添加新功能,比如说,我以前写了很多代码,系统已经上线了,但是性能比较不好,现在想把程序里面每个函数都加一个功能,用来统计每个函数的运行时间是多少,找出来运行比较慢的函数,来优化代码,就需要添加一个新的功能,来统计程序的运行时间,那这样的话,就得修改每个函数了,需要改代码,但是代码特别多,改完了公司倒闭了,这时候装饰

JavaScript 中Array数组的几个内置函数

本文章内容均参考<JavaScript高级程序设计第三版> 今天在看JavaScript书籍的时候,看到之前没有了解过的JavaScript中Array的几个内置函数对象,为了之后再开发工作中能方便查询,故编写此随笔.直接贴代码, function arrayEffect(){ var numbers = [1,2,3,4,5,6,7,8,9,10]; //------------------------------------ 支持浏览器版本 IE9+,Firfox 2+ ,Safair 3

《Python运维开发之路》 内置函数&amp;数据结构(六)

一.Python内置函数详解 Python内置函数图解    您也可以访问(里面有各种例子):https://docs.python.org/3/library/functions.html#next 以下分别举例子演示各种函数的使用  大后天更新,撸起袖子加油干!!! 一.Python常用数据结构 目录: 普通的列表结构 将列表当作堆栈使用 将列表当作队列使用 列表推导式 嵌套列表解析 del语句的使用 元组和序列 集合 字典 一些遍历技巧  大后天更新,撸起袖子加油干!!! 参考文献:htt

python字符的各种处理,不用内置函数总结

一.字符的逆序,可变字符长度的最大值,自然数列表相加 # e=input("输入自然数字字符串:") # result=0 # for x in e: # result+=eval(x)-------------------第一题 # print(result) # def rev(str): # print(str[-1::-1]) # if __name__ == '__main__':-----------------第二题 # st=input() # rev(st) # de