python装饰器与面向对象
来源:互联网 发布:淘宝网申请退货 编辑:程序博客网 时间:2024/06/06 01:23
装饰器(装饰器就是用来装饰函数的函数)
普通的函数:
def 函数名(形参): # 变量名 函数体 return 变量|常量 print 函数名(实参)
装饰器:
def 函数名1(形参): #此形参传递函数 def 函数名2(形参): 函数体 return 变量|常量 return 函数名 ##也就是函数2的地址
装饰器的调用有两种方法
1.@函数名1 #此方法作用在要使用的函数之上
2.函数=函数名1(函数) #此方法与上相同,方式不同,建议使用上面的
举例:
def dtimer(fun): def timer(*args): # 高阶函数 #args = (1,2,3,4) start_time = time.time() fun(*args) # args =(1,2,3,4), 解包*(1,2,3,4) stop_time = time.time() return "run %s" % (stop_time - start_time) return timer # 返回的是timer的地址,要执行该函数需要timer()@dtimer # fun1 = dtimer(fun1)def fun1(*args): print "in the fun1....." print args time.sleep(1)
匿名函数
lambda 形参 : 返回值
主要作用于高阶函数调用函数中使用,以减少代码量,且不用定义函数名
面向对象编程
面向过程:所有的事情都要亲历亲为
面向对象:创建一个对象,所有的事情交给对象去完成
面向对象的一些关键名词
类 ===== 建房子的图纸 (三室一厅,两室一厅…….)
对象 ===== 实际建出来的房子(门牌号)
实例化 ==== 建造的过程(根据类来创建对象的过程)
class People(object): # 类 def __init__(self,name,age): # 构造函数 self.name = name # 属性 self.age = age def eat(self): #方法 print " %s 正在吃辣条....." %(self.name) def echo_self(self): print selftianfeng = People("田峰",18) # 通过类实例化出来的对象print tianfengtianfeng.echo_self() ##通过对象来调用方法
self系统创建出来的对象,我们实例化出来的对象,只是指向此对象的地址
访问对象属性的两种方式:
1.self.name
2.tianfeng.name
面向对象的三个特性:封装,继承,多态
封装:将所有的操作包装到一个不被外界看到的整体中,只对外开放部分提供的功能
继承:一个类可以继承另一个类,包括所有的变量,内置函数。。。
多态:在继承的前提下,可以自己编写相关函数来替代继承的函数,保持子类的独立性
多继承
- python的类可以继承多个,Java和C#只能单继承;
- 继承多个类,有两种算法:深度优先算法和广度优先算法;
- 类为经典类(class C:)时,多继承时使用深度优先算法;
- 类为新式类(class C(C1,C2))时,多继承时使用广度优先算法;
eg: D, C(D), B(D), A(B,C)
-深度优先:A->B->D->C
-广度优先: A->B->C->D
类的私有属性
当我们的类中存在一些不想被别人访问和修改的属性时,
我们可以将此属性变为私有属性
-创建方式:属性前加两个下划线
class People(object): def __init__(self, name, money): self.name = name self.__money = money #此为私有属性
私有属性不能被访问
私有属性的实质:python内部将self._money给它重命名为类名__money
类的方法
有些情况使我们不能创建类的对象,但我们还需要调用类的方法,
此时就需要创建类的方法,此方法可以使用类名来调用,而不用实例化对像
-创建方式:@classmethod标记类的方法关键字,并且返回值为对象
@classmethod #类的方法关键字 def from_str(cls,s): # class,类方法的第一个参数是类本身,cls = Date year, month, day = map(int, s.split("-")) d = cls(year,month,day) # d = Date(year,month,day) return d # 对象 d1 = Date.from_str('2018-10-19') #调用
类的静态方法
静态方法也可以直接使用类名调用
-创建方式:@staticmethod标记类的静态方法关键字
@staticmethod def is_date_legal(s): # 静态方法,第一个参数既不是对象,也不是类本身, year, month, day = map(int, s.split("-")) return year >= 1970 and 0 < month <= 12 and 0 < day <= 31
类的私有属性
-类的属性,在内存中只需要存储一次;
-在构造函数中的属性,每实例化一个对象,就需要存储一次;
class People(object): country = "China" #私有属性 def __init__(self, name): #构造函数中的属性 self.name = name
- python装饰器与面向对象
- python面向对象与装饰
- Python---面向对象装饰器
- 第20节--python面向对象编程与装饰器
- python基础-09-面向对象、装饰器
- Python 装饰器与面向切面编程
- Python装饰器与面向切面编程
- Python装饰器与面向切面编程
- Python装饰器与面向切面编程
- Python装饰器与面向切面编程
- Python装饰器与面向切面编程
- Python装饰器与面向切面编程
- Python装饰器与面向切面编程
- Python装饰器与面向切面编程
- Python装饰器与面向切面编程
- Python装饰器与面向切面编程
- Python装饰器与面向切面编程
- Python装饰器与面向切面编程
- 配置jupyter notebook-----更改工作目录
- 193. Valid Phone Numbers。
- bonding(绑定与删除)
- CSS3的REM设置字体大小
- [leetCode 解题报告]017. Letter Combinations of a Phone Number
- python装饰器与面向对象
- BFS和DFS的比较
- 基于Java、Kafka、ElasticSearch的搜索框架的设计与实现
- 深入理解MyBatis(五)—MyBatis的插件机制
- setTimeout setInterval 和 clearInterval 的使用
- Java--集合
- Ubuntu下安装opencv2.4.10
- iOS 内存管理~浅拷贝(Shallow Copy)
- ProgressBar&ProgressDialog