测试开发进阶(七)
元类
新式类 旧式类
1 | # 在python3中两个类定义没有任何区别,都是继承于object |
- 在python2中
1 | c = Myclass() |
- 在python3中
1 | c = Myclass() |
使用type动态创建类
1 | type(object_or_name, bases, dict) |
type(name, bases, dict)
- name:类名
- base:所继承的父类元祖
- dict:字典(包含了属性和方法)
查看type的init方法
what也就是类名,必须要传入
1 | def __init__(cls, what, bases=None, dict=None): # known special case of type.__init__ |
不传入bases和dict创建一个类
1 | Myclass = type('Myclass') |
传入bases和dict创建一个类
1 | def func(self): |
对象引用
引用计数
1 | a = 10 # a指向10,计数1 |
引用计数减少
- 对象的别名被显式销毁
- 对象的一个别名被赋值给其他对象(a=10变为a=100,10的计数-1)
- 对象从容器中移除,或容器销毁(对象从列表中移除,列表被销毁)
- 一个引用离开了它的作用域(调用函数时,传入的参数,在函数结束的时候销毁)
1 | import sys |
内置函数is和id
1 | a = 10 |
深浅拷贝
- 浅拷贝
1 | li = [1, 2, 3] |
- 深拷贝
1 | li2 = copy.deepcopy(li) |