概述
1.再次回顾程序结构
程序由模块组成,模块中包含了语句块,语句块中包含了表达式,表达式创建并处理对象。
2.类和类型合并
类现在就是类型,类型就是类
>>> type(type)
<class 'type'>
>>>
3.多继承搜索顺序
先横向搜索,再纵向搜索;先宽度搜索,再深度搜索。
4.元类
每一个类都由一个元类生成。
元类,要么是type自身,要么是它定制来扩展和管理生成的类的一个子类。
5.所有对象派生自object
python3.x中都是新式类,隐式继承object,也可显式继承;
而python2.x中需要显示继承才能达到同样的效果。
类型自身派生自object,并且object派生自type,即便二者是不同的对象---一个循环的关系覆盖了对象模型,这样形成了一个循环,所以类型就是类。
>>> type(object)
<class 'type'>
>>>
6.静态方法(staticmethod)和类方法(classmeethod)
在ptyhon2.x中,在类中会定义两种方法,不用一个实例就可以调用:静态方法和类方法。
静态方法:与一个类中的简单的无实例函数类似的工作;
类方法:传递一个类而不是实例。
在python3.x中, 无实例的方法只通过一个类名调用,而不需要一个staticmethod声明,但这样的方法确实是通过实例来调用。
无论是python2.x还是python3.x,静态方法的写法,
@staticmethod #使用装饰器 def mymethod(): #不传入self实例 pass
静态方法调用时不需要实例传参,与类之外的简单函数不同,其变量名位于定义所在类的范围内,属于局部变量,而且可以通过继承去查找。
7.装饰器
函数装饰器提供了一种方式,替函数明确了特定的运算模式,也就是将函数包裹了另一层,在另一函数的逻辑内实现,可以用来记录函数的日志或调用次数、检查参数的类型等。
使用方式为,在def之前,由@符号后面跟所谓的元函数(metafunction,管理另一函数的函数)
装饰器可以自定义,使用运算符重载__call__,为类实例实现函数调用的接口,如下,
>>> class tracer:
... def __init__(self,func):
... self.calls = 0
... self.func = func
... def __call__(self,*args): #为类实例实现函数调用的接口
... self.calls += 1
... print('call %s to %s'%(self.calls,self.func.__name__))
... self.func(*args)
...
>>> @tracer #函数装饰器调用方法
... def spam(a,b,c):
... print(a,b,c)
...
>>> spam(1,2,3)
call 1 to spam
1 2 3
>>> spam('a','b','c')
call 2 to spam
a b c
>>> spam(4,5,6)
call 3 to spam
4 5 6
>>>
8.类装饰器
最后
以上就是幸福滑板为你收集整理的python学习手册(第4版) 第三十一章 类的高级主题的全部内容,希望文章能够帮你解决python学习手册(第4版) 第三十一章 类的高级主题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复