类和实例的绑定方法和属性

实例绑定 obj.func = func obj.func(obj, &argv)  obj.func = MethodType(func, obj) 第一个参数是方法的引用 第二个参数是自身的引用    这种属于动态绑定 只能当前实例使用

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

类绑定 classname.func = func  classname.func = MethodType(func, classname) 实例后的对象都能使用 这种方法是在类的内存中创建一个link指向外部的方法

__slots__ 限制类的实例属性 只对当前类起作用 对继承的子类不起作用 如果子类也有__slots__ 那么子类实例允许定义的属性就是自身__slots__加上父类的__slots__

__slots__ = tuple 定义允许绑定的属性名称 注意如果没定私有属性 那么实例也不能使用私有属性 即__slots__ = ('__name') 这样才能使用self.__name = name

@property装饰器把一个方法变成属性 属性名和函数名要一样 如果属性有多个值 则都需要初始化

多继承  MixIn的目的就是给一个类增加多个功能 多继承顺序可查看mro()  C3算法拓扑排序

定制类 __str__(print调用的这个) __iter__(变成可用迭代的) __getitem__(变成可以用切片的) __call__ (把类实例变成可调用的) 特殊方法 不需要直接调用 python的某些函数或操作符会自动的调用对应的特殊方法

为什么有的对象可以用于for循环 有的可以用于切片 是因为对象本身里带有特殊函数 做特定操作会自动调用 dir()查看有哪些特殊函数

枚举类 enum @unique装饰器避免重复value   __member__返回name和value 可以把一组相关常量定义在一个class中 class不可变

实例的类型是class class的类型是type type('Class name', (object,) di c(classmethod=fnc))

元类metaclass可以创建类 修改类

所有错误类型都继承自BaseException try运行可能出错的代码 如果运行出错则后续代码不会继续执行 而是直接跳转至except语句块 执行完except后 如果有finally语句块则执行 如果没发生错误 就不执行except 但finally一定会执行

调用栈traceback 

记录错误logging 级别debug info warning error 只打印logging.basicConfig(level=logging.INFO)

抛出异常raise 可以自定义异常类继承系统的异常类

调试 print()打印可能有问题的变量 assert断言 后接的表达式结果若为假则会抛出AssertionError 可以用-0关闭assert 调试器pdb单步调试

单元测试“测试驱动开发” TDD:test-driven development

文档测试

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄