Python 学习 —— 进阶篇(装饰器、类的特殊方法)
Python基础部分学完之后,在进入其OOP部分前,先理解一下其装饰器这种结构,其功能可类比于Java中的面向切面编程,下面参见具体实例:
def log(f):
def fn(x):
print 'call ' + f.__name__ + '()...'
return f(x)
return fn print '------------ 直接调 ----------- '
g = log(int)
g('') # 只调不打印返回值
print ''
print g('') # 又调又打印输出结果 print '------------ 装饰器 ----------- '
@log
def myabs(x):
if x < 0:
return -x
else:
return x
print myabs(-17) # 下面是错误的装饰器调用
# @log
# def add(x,y):
# return x + y
# print add(4,8) print '----------- 修改装饰器以支持多参数 -----------'
def log2(f):
def fn(*args,**kv):
print 'call ' + f.__name__ + '()...'
return f(*args,**kv)
return fn
@log2
def add(x,y):
return x + y
print add(4,8) print '-------------------- 带参的装饰器 ------------------------'
def log3(prefix):
def log_decorator(f):
def fn(*args,**kv):
print '[%s] %s()...' % (prefix,f.__name__)
return f(*args,**kv)
return fn
return log_decorator print '---- 普通调用 -----'
def division(x,y):
return x/y
log_decorator = log3('DEBUG')
division = log_decorator(division)
print division(18, 6) print '---- 装饰器调用 ----'
@log3('DEBUG')
def multiplication(a,b):
return a * b
print multiplication(3, 4)
下面针对Python类中几个常见的特殊方法重写:
class Student(object):
def __init__(self,name,score):
self.name = name
self.score = score
def __str__(self):
return '(Student: %s, %s)' % (self.name,self.score)
def __cmp__(self,s):
if self.name < s.name:
return -1
elif self.name > s.name:
return 1
else:
return 0
def __call__(self,friend):
print 'My name is %s...' % self.name
print 'My friend is %s...' % friend.name print '------- basic info output ------------'
John = Student('John',99)
Alice = Student('Alice',85)
print John
print Alice print '\n------------ special called -------------'
John.gender = 'male'
print 'changed: ' , John # 没打印出来新属性gender,因为自定义的__str__方法中没有
print John.gender # 确实给John添加了新属性
John(Alice) print '\n------------ instance sort --------------'
L = [John,Alice]
print sorted(L) print '\n------- print a sorted list -----------'
mylist = [Student('Alice',85),Student('Bob',90),Student('Tom',100)]
print sorted(mylist)
Python 学习 —— 进阶篇(装饰器、类的特殊方法)的更多相关文章
- 第7.26节 Python中的@property装饰器定义属性访问方法getter、setter、deleter 详解
第7.26节 Python中的@property装饰器定义属性访问方法getter.setter.deleter 详解 一. 引言 Python中的装饰器在前面接触过,老猿还没有深入展开介绍装饰 ...
- day20-Python运维开发基础(装饰器 / 类中的方法 / 类的方法变属性)
1. 装饰器 / 类中的方法 / 类的方法变属性 # ### 装饰器 """ 定义:装饰器用于拓展原来函数功能的一种语法,返回新函数替换旧函数 优点:在不更改原函数代码的 ...
- Python学习笔记:装饰器
Python 装饰器的基本概念和应用 代码编写要遵循开放封闭原则,虽然在这个原则是用的面向对象开发,但是也适用于函数式编程,简单来说,它规定已经实现的功能代码不允许被修改,但可以被扩展,即: 封闭:已 ...
- python学习之类的装饰器进阶版
装饰器可以修饰函数,同样,也可以修饰类 装饰器 def deco(func): print('======>被修饰的')return func 装饰器装饰函数的方式,语法糖 @decode ...
- Python学习笔记012——装饰器
1 装饰器 1.1装饰器定义 在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator). 1.2 装饰器分类 装饰器:函数装饰器,类装饰器,函数的装饰器,类的装饰器 装饰器:函数装饰函 ...
- python学习笔记(五):装饰器、生成器、内置函数、json
一.装饰器 装饰器,这个器就是函数的意思,连起来,就是装饰函数,装饰器本身也是一个函数,它的作用是用来给其他函数添加新功能,比如说,我以前写了很多代码,系统已经上线了,但是性能比较不好,现在想把程序里 ...
- Python学习系列之装饰器
装饰器的作用 装饰器用于装饰某个函数.方法或者类,它可以让这个函数执行之前或者执行之后做一些操作 手工实现一个装饰器 def outer(some_func): #装饰器 $1 def inner() ...
- python学习之day5,装饰器,生成器,迭代器,json,pickle
1.装饰器 import os import time def auth(type): def timeer(func): def inner(*args,**kwargs): start = tim ...
- python学习笔记之装饰器、递归、算法(第四天)
参考老师的博客: 金角:http://www.cnblogs.com/alex3714/articles/5161349.html 银角:http://www.cnblogs.com/wupeiqi/ ...
随机推荐
- python日志实时分析
python随着人工智能的发展,越来越火热.但其实python在运维测试方面,也是一把利器. 最近就碰到了个需求,就顺手写了个python程序.用惯了go,不过发现python好像更简单点 :-) 涉 ...
- bash shell的ANSI控制
格式: echo -e "\033[字背景颜色;字体颜色m字符串\033[0m" 例如: echo -e "\033[41;36m something here \03 ...
- Flutter——BottomNavigationBar组件(底部导航栏组件)
BottomNavigationBar常用的属性: 属性名 说明 items List<BottomNavigationBarItem> 底部导航条按钮集合 iconSize icon c ...
- Windows工作原理
Windows工作原理中心思想 Windows工作原理的中心思想就是“动态链接”概念.Windows自身带有一大套函数,应用程序就是通过调用这些函数来实现它的用户界面和在屏幕上显示文本与图形的.这些函 ...
- 14、RALM: 实时 look-alike 算法在推荐系统中的应用
转载:https://zhuanlan.zhihu.com/p/71951411 RALM: 实时 look-alike 算法在推荐系统中的应用 0. 导语 本论文题为<Real-time At ...
- PHP批量更新MYSQL中的数据
原文链接:https://blog.csdn.net/wuming19900801/article/details/62893429 $sql = "update newhouse_clic ...
- 编译安装PTLib和H.323 Plus Core
下载PTLib和H.323 Plus Core,官方网站很容易下载:http://www.h323plus.org/source/. 我下载这两个库后存放到目录/home/ynq/h323plus下, ...
- SIGAI机器学习第五集 贝叶斯分类器
讲授贝叶斯公式.朴素贝叶斯分类器.正态贝叶斯分类器的原理.实现以及实际应用 大纲: 贝叶斯公式(直接用贝叶斯公式完成分类,计算一个样本的特征向量X属于每个类c的概率,这个计算是通过贝叶斯公式来完成的. ...
- box-orient
box-orient 语法: box-orient:horizontal | vertical | inline-axis | block-axis 默认值:horizontal 适用于:伸缩盒容器大 ...
- Centos 查看CPU个数、核心数等信息
总核数 = 物理CPU个数 X 每颗物理CPU的核数 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 查看物理CPU个数 cat /proc/cpuinfo| grep & ...