python学习手册(第4版) 第三十一章 类的高级主题

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.类装饰器

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值