notes for lxf(五)
类和实例的绑定方法和属性
实例绑定 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
文档测试
