1.装饰器遵循的原则
ocp 原则: 开闭原则, 为了软件开发的稳定性而设计的原则
装饰器函数要满足的条件
- 不能改变原来的函数代码
- 为函数添加新的功能
- 不能改变函数的调用方法
- 面向扩展开放,面向修改关闭
2.浅拷贝,深拷贝
- import copy
- list[10,20,[10,20]]
- count = list 复制 原始队列改变,被赋值的队列也发生改变
- 浅拷贝 copy.copy() 外层为新的引用,内层为原有的引用
- 深拷贝 copy.deepcopy() 外层,内层都为新引用
3. 进制转换
- 10进制转换为2进制
- bin(10)
- 10进制转换为16进制
- hex(10)
- 10进制转化为8进制
- cot(10)
- 2 进制转换为10进制
- int('1001',2)
- 2 进制转换为16进制
- hex(ob1001)
- 16进制转换为2进制
- bin(0xa)
4. 元类
- 元类用来创建类
- 类的类型为type
- type的类型为type
- 使用type创建类
- s = type('Student',(),{'name':hello})
- 通过type创建类,继承类,添加实例方法,静态方法,类方法
- 使用元类的好处
- 拦截类的创建
- 修改类
- 返回修改之后的类
- hasattr() # 判断是否包含对应的属性
- hasattr(object,name)
- getattr() # 用于返回一个对象属性值
- getattr(object,name,default)
- setattr() # 用于设置属性值,该属性必须存在
- setattr(object,name,value)
- delattr() # 删除属性
- delattr(object,name)
- 自定义元类
# 类名 父类名 属性字典
def renameattribute(classname,parentclass, attributeddic):
# print(classname)
# print(parentclass)
# print(attributeddic)
newwattribute = {}
for key, value in attributeddic.items():
# print(key, value)
# startswith用于检测字符串是否以什么开头
if not key.startswith("__"):
#.lower()转换为小写
key = classname.lower() + key
newwattribute[key]= value
return type('Hello',parentclass,newwattribute)
# for key,value in newwattribute.items():
# print(key,value)
pass
class Deft(object, metaclass=renameattribute):
age = 20
a1 = Deft()
print(hasattr(a1, 'age'))
print(hasattr(a1, 'deftage'))
print(a1.__class__)