python装饰器、类可以用来装饰、元类、type()的使用、python的存储机制:小整数池、intern机制
2017-07-14 17:58
525 查看
装饰器
foo = timefun(foo) #foo先作为参数赋值给func后,foo接收指向timefun返回的wrappedfunc foo() #调用foo(),即等价调用wrappedfunc() #内部函数wrappedfunc被引用,所以外部函数的func变量(自由变量)并没有释放 #func里保存的是原foo函数对象
from time import ctime,sleepdef timefun(func):def wrappedfunc(a,b):print("%s called at %s "%(func.__name__,ctime()))print(a,b)func(a,b)return wrappedfunc@timefundef foo(a,b):print(a+b)foo(3,5)类作为装饰器一般都是函数作为装饰器,但是类也可以作为装饰器。
class TestCal(object):def __call__(self):print("the function of cal")t=TestCal()t() #这里直接运行__call__方法class TestClass(object):def __init__(self,func):print("---init----")print("func name is %s"%func)self.__func=funcdef __call__(self):#类生成的新的对象指向新的函数print("the function inner")self.__func()#类生成的新的对象指向新的函数指向新的函数@TestClass#相当于ClassTest作为参数传到类中,创建一个对象(自动调用__init__),返回一个实例给了ClassTestdef ClassTest():print("----the class test ----")'''---init----func name is <function ClassTest at 0x0000000000ACD1E0>'''#对象是不可以直接被调用的,若有个__call__()方法就可以直接被调用ClassTest()'''the function inner----the class test ----'''元类type()的使用
#类也是一个对象print(type(100))#<class 'int'> 属于int类型t1=TestCal()print(type(t1))#<class '__main__.TestCal'> 属于当前函数中的类TestCal()#type()的功能:可以得到对象的类型 2 可以动态的创建一个类#不建议动态的创建类,一般自己定义好类就可以class TypeClass():nums=0tC1=TypeClass()#元类,创建类的一种方法#利用type()同样可以#type("类名",(父类的元组),{"属性":值,”方法名:已定义好的方法名})def addFuncType(self):print("the num of type func is %s"%self.num)tC2=type("TypeClass2",(),{"num":0,"FuncType":addFuncType})t2=tC2()#创建一个实例t2.numt2.FuncType()#添加一个方法:the num of type func is 0#type也可以创建继承父类的子类class Animal:def eat(self):print("----can eat---")class Dog(Animal):passCat=type("Cat",(Animal,),{})dog=Dog()cat=Cat()dog.eat()#----can eat---cat.eat()#----can eat---#函数type是一个元类,元类就是用来创建类对象的,元类就是类的类,元类创建了python的所有的类#str是用来创建字符串对象的类,int是用来创建整数对象的类print(dog.__class__)#显示对象所属的类型 <class '__main__.Dog'>print(Animal.__class__)#<class 'type'>#__metaclass__=upper_attr 这里的__metaclass__是规定元类创建的类的形式python的存储机制:小整数池、大整数对象池、intern机制
#小整数对象池a=100b=100c=100id(a)id(b)id(c)#会发现a,b,c 的id()是一样的,不可变的值python中只定义一次#python对小整数的定义是[-5,257)这些整数对象是提前建立好的,不会被垃圾回收#所有位于这个范围内的整数使用的都是同一个对象#python早已经创建好了,在使用的时候添加引用aa=1000bb=1000 #aa,bb的id是不一样的#单个字母也是定义好的#但是当定义2个字母相同的字符串时,引用计数为0,触发垃圾回收。###大整数对象池#每一个大整数,均创建一个新的对象##intern机制# 单个单词,不可修改,默认开启intern机制,共用对象,引用计数为0,则销毁# 单词中有空格,则会创建新的对象#
相关文章推荐
- python装饰器、类可以用来装饰、元类、type()的使用、python的存储机制:小整数池、intern机制
- python高效编程技巧7(pickle的使用:可以将一个对象存储在一个文件中,或者load进来)
- 在python的应用程序中,不需要关系型数据库时,如MySQL可以使用python提供的持久字典dbm来存储名称和值(键值对)
- python 9-1 如何使用函数装饰器,定义函数装饰器,用来生成一个原函数基础添加新功能的函数,替代原函数
- python 使用装饰器提示:TypeError: wrapper() takes no arguments (1 given)
- 编写一个程序读入一行输入,然后反向打印该行,您可以把输入存储在一个char数组中: 假定该行不超过255个字符。回忆一下,您可以使用具有%c说明符的scanf()从输入中一次 读入一个字符,而且当您按下回车键时会产生换行符(/n)
- 使用Python二进制与十进制之间的转化,可以操作浮点数!
- Python 元类使用说明
- 使用keeplive机制,可以检测到网络异常。(转)
- Python中list的append方法添加,和使用下标取得。之中的元素还可以是其他的数据结构
- InnoDB存储引擎中使用的锁机制
- python 装饰器功能以及函数参数使用
- python 装饰器功能以及函数参数使用介绍
- 怎样在存储过程中动态的使用表名,而又可以使用游标?
- 【转】python 装饰器功能以及函数参数使用
- Python持久性管理——使用序列化存储Python对象
- SQL2000系统表、存储过程、函数的功能介绍及应用2009年01月21日 星期三 11:38虽然使用系统存储过程、系统函数与信息架构视图已经可以为我们提供了相当丰富的元数据信息,但是对于某些特殊的元数据信息,我们仍然需要直接对系统表进行查询。因为SQL
- 使用busybox-1.9.2制作根文件系统 (转,可以用来参考配置busybox)
- 最近在研究enigma2的代码,那叫个庞大,C/C++写中间件,上层应用全部用python实现,可以学习一下plugin的实现机制了.
- python 装饰器功能以及函数参数使用介绍