python3 之metaclass】的更多相关文章

如果希望创建某一批类全部具有某种特征,则可通过 metaclass 来实现.使用 metaclass 可以在创建类时动态修改类定义. 为了使用 metaclass 动态修改类定义,程序需要先定义 metaclass, metaclass 应该继承 type 类,并重写 __new__() 方法. 下面程序定义了一个 metaclass 类: #定义ItemMetaClass,继承type class ItemMetaClass(type): # cls 代表动态修改的类 # name 代表动态修…
单例模式:一个类无论实例化多少次,返回的都是同一个实例,例如:a1=A(), a2=A(), a3=A(),a1.a2和a3其实都是同一个对象,即print(a1 is a2)和print(a2 is a3)都会打印True. 实现方式:有两种方式,一种是使用元类metaclass控制类实例化时的对象,另一种是使用类的__new__方法控制类返回的对象,推荐使用元类的方式,因为__new__通常是用来改变类结构的. 注:关于元类和单例模式,本文只是贴了两个简单的示例代码和自己的一些心得,想要更加…
一.知识储备 #exec:三个参数 #参数一:字符串形式的命令 #参数二:全局作用域(字典形式),如果不指定,默认为globals() #参数三:局部作用域(字典形式),如果不指定,默认为locals() exec的参数格式 #可以把exec命令的执行当成是一个函数的执行,会将执行期间产生的名字存放于局部名称空间中 g={ 'x':1, 'y':2 } l={} exec(''' global x,z x=100 z=200 m=300 ''',g,l) print(g) #{'x': 100,…
""" """ __author__ = 'shaozhiqi' # 动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的. # type()函数既可以返回一个对象的类型,又可以创建出新的类型,比如,我们可以通过type()函数创建出Hello类,而无需通过class Hello(object)...的定义: def fn(self, name='world'): print('hello, % s.' % n…
这个星期开始学习Python了,因为看的书都是基于Python2.x,而且我安装的是Python3.1,所以书上写的地方好多都不适用于Python3.1,特意在Google上search了一下3.x和2.x的区别.特此在自己的空间中记录一下,以备以后查找方便,也可以分享给想学习Python的friends. 1.性能 Py3.0运行 pystone benchmark的速度比Py2.5慢30%.Guido认为Py3.0有极大的优化空间,在字符串和整形操作上可 以取得很好的优化结果. Py3.1性…
这个星期开始学习Python了,因为看的书都是基于Python2.x,而且我安装的是Python3.1,所以书上写的地方好多都不适用于Python3.1,特意在Google上search了一下3.x和2.x的区别.特此在自己的空间中记录一下,以备以后查找方便,也可以分享给想学习Python的friends. 1.性能 Py3.0运行 pystone benchmark的速度比Py2.5慢30%.Guido认为Py3.0有极大的优化空间,在字符串和整形操作上可 以取得很好的优化结果. Py3.1性…
python3.0与2.x之间的区别: 1.性能 Py3.0运行pystone benchmark的速度比Py2.5慢30%.Guido认为Py3.0有极大的优化空间,在字符串和整形操作上可以取得很好的优化结果. 2.编码 Py3.0源码文件默认使用utf-8编码,这就使得以下代码是合法的: >>>中国 = 'china' >>> print(中国) china 3.语法 1)去除了<>,全部改用!= 2)去除``,全部改用repr() 3)关键词加入as和…
#!/usr/bin/env python3 # -*- coding: utf- -*- # # Python3 ORM hacking # 说明: # 之前分析了一个Python2 ORM的源代码,这次分析一个Python3的源代码,在写法上 # 还是又挺大的区别的.# 2016-10-22 深圳 南山平山村 曾剑锋 # # 源码: # https://github.com/michaelliao/awesome-python3-webapp/tree/day-03 # # 参考文章: #…
1.源代码编码和标识符         Python3假定源代码使用UTF-8编码.另外,关于标识符中哪些字符是合法的规则也放宽了.特别是,标识符可以包含代码点为U+0080及以上的任意有效Unicode字符.例如:         π = 3.1415926 2.集合字面量         在{}中放入一组值就可以定义一个集合,例如:         days = {'Mon','Tue','Wed','Thu','Fri','Sat','Sun'} 同:         days = set…
python3.0与2.x之间的区别: 1.性能 Py3.0运行pystone benchmark的速度比Py2.5慢30%.Guido认为Py3.0有极大的优化空间,在字符串和整形操作上可以取得很好的优化结果. 2.编码 Py3.0源码文件默认使用utf-8编码,这就使得以下代码是合法的: >>>中国 = 'china' >>> print(中国) china 3.语法 1)去除了<>,全部改用!= 2)去除``,全部改用repr() 3)关键词加入as和…