python——深入类和对象
对象有三个特征:身份、类型和值
eg:a=1 就是a这个变量指向用int封装的这个1 的对象
type(a) ,打印出是int类型
type->class->obj
class是由type生成的一个对象,然后进行实列化
object是最顶层的基类
type也是一个类,继承object,同时他是自己实例化自己,所谓的实列化就是一个变量指针指向地址的内存块。
类型
None 作为全局的唯一
a=None,b=None,说明 a和b同时指向唯一的内存块 ,因此id(a)=id(b)
数值
int,float,complex(复数) ,bool
迭代类型
序列类型
映射
集合
上下文切换(with)
魔法函数
但是带有双下划线的函数则是魔法函数
类变量和实列变量
打印出来分别是 4 ,5 ,100,11
当你调用 A.x的时候是打印出错,因为不可以往下调用实列化的数据。比如说来一个 b = A(3,4),实列化之后就不归类管,反之则是实列化后的数据可以调用类变量。
总结就是,查找变量是由下而上的去查找
类实列属性的查找循序
(<class 'main.A'>, <class 'main.B'>, <class 'main.C'>, <class 'main.D'>, <class 'object'>)
类方法、静态方法和实列方法
首先要确定一点,就是self是指代已经实列化的主题类。因此self.day是实列化后的day再加1,
如果是类本身的话,就是
@staticmethod
def tomorrow(): Date.day += 1
类方法则是 需要传入cls ,里面的cls就是指代类的本身 def fromstring(cls, datestr)
tuple这个是用于拆分数据包的函数
super函数
mixin继承
特点:1 mixin类功能单一 2 不和基类关联,可以和任何一个基类组合,基类可以不和mixin关联就可以初始化成功
3 在mixin中不要使用super方法
with上下文管理器/协议
此时返回的是4 不是2, 是因为return 2的时候,把2压入堆栈,在finally处得到return 4 再将4压入堆栈中,之后4先从堆栈中弹出。
初始化的时候默认调用 enter方法,在enter上获取资源
调用with语句时候,默认调用exit方法,在exit上释放资源
最后打印出 enter doingsomething exit
contextlib是将一个函数变成上下文管理器,其修饰的必须是一个生产器(yield)
执行部分先是 file open 接着是执行修饰器上的yield: file processing ,最后是 file end
版权声明: 本文为 InfoQ 作者【菜鸟小sailor 🐕】的原创文章。
原文链接:【http://xie.infoq.cn/article/3400aaace04fa954863bced53】。未经作者许可,禁止转载。
评论