Python类和对象一(十)
封装:
在创建对象之前,通过类将相关的属性和方法打包到一起,然后通过类来生成响应的对象
定义类:
创建对象:
方法里面有个参数self:new的对象
当我们调用类里面方法的时候,py是怎么知道是哪一个对象在调用呢,就是通过self传递的信息
类中的每一个方法,默认的第一个参数都是self
继承:
判断对象是否属于某个类:
检测某个类是否为某个类的子类:
多重继承:
对象访问属性和方法,会优先去第一个类中找,第一个找不到了才去第二个类中找
组合:
self就是实例对象本身,self起到的作用就是绑定,实例对象跟类的方法进行绑定,类的实例对象可以有很多,实例对象共享类里面的方法
self绑定:
当调用实例c.get_self的时候实际是调用类c的get_self方法,并将实例对象作为参数传递进去,进而实现绑定
在实例中类的方法是共享的,属性是自己的
对象内省:
py是支持内省的语言,对象在运行的时候拥有自我观察能力,我们想要知道对象有那些属性,可以通过_ _dic_ _ 内省
通过类里面的方法设置类的属性:
在 class C
中定义的 x = 100
属于类属性。类属性是定义在类中,且不属于任何一个具体实例特有的属性,它被类的所有实例共享。当你创建实例 c = C()
后,c
可以访问到类属性 x
,这是因为当实例去访问一个属性时,如果自身不存在该属性,就会向上到类中查找
实例属性是在实例化对象后,通过特定方式为每个实例单独创建的属性。在 set_x
方法中,x = v
这种写法只是在方法内部创建了一个局部变量 x
,并没有将其与实例 c
关联起来成为实例属性。若要为实例 c
创建名为 x
的实例属性,在 set_x
方法中应写成 self.x = v
,这里的 self
代表实例本身,这样赋值后,实例 c
就有了自己独立的实例属性 x
。
当修改C类属性x值后,对象c的值也变了,因为通过类生成的实力对象,都共享的这个属性,一旦修改它,由他创建对象也改变了
定义最小的类:
可以把它当做字典类使用:
字典:
最小类
一般建议通过类 生成的实力来模拟字典: