python之类和对象(二)
一、方法(Method)
1、方法:类里面定义的函数称为方法,代表类或者实例的行为。
2、方法的调用
1)初始化方法:__init__(),特殊的,它在实列创建的时候会自动调用
2)类/实例.方法(self,[param1,param2...])
3、方法的种类:实例方法、类方法、静态方法
1)实例方法
a、实例方法:一个对象(个体)特有的行为。(对应实例属性)
b、带有self的方法是实例方法
c、实例方法调用:obj.方法()
b、实例方法可有参数,调用的时候传入实参(参数---同普通函数的参数)
2)类方法
a、类方法:整个类具有的行为
b、类方法的定义:在方法的上面需要声明@classmethod,方法里的第一个参数为cls。
c、类方法的调用:类.类方法()/实例.类方法()------实例可以调用类方法
类方法和实例方法的区别:
类方法会在方法上面加一个声明@classmethod;
实例方法只能通过实例调用,而类方法可以通过类和实例进行调用。
3)静态方法(static method)
a、静态方法表示:在方法的上面需要声明@staticmethod
b、静态方法里面的没有使用self也没有使用cls,即和实例以及类没有产生联系,和类、实例没有关系
c、当你需要将一个普通函数放在类下面时候可以定义静态方法,起到方便管理的作用,故放类里面和类外面函数产生的效果是一样的。
d、静态方法的调用:类.方法()/实例.方法(),与类方法调用一致
二、继承
1、继承
a、子类和父类是一种继承关系,一种包含和被包含的关系,包含的是父类,被包含的是子类
b、子类会继承父类的所有属性和方法
c、定义:class 类名(父类):
2、方法重写
a、在子类中重新定义一个父类拥有的方法,调用的时候使用子类重写定义方法。
b、父类和子类具有相同的方法、属性,如果自己有先调用自己的
3、多重继承
a、一个类可以同时继承多个父类
b、定义:class 类名(父类1,父类2...)
c、当我们调用一个对象的方法时顺序(类.__mro__:获取继承优先顺序)
会优先去当前对象中寻找是否具有该方法,如果有则直接调用
如果没有则去对象的父类中寻找,如果父类中有则直接调用父类中的方法
如果还是没有则去父类中的父类中寻找,以此类推,直到找到object ,
如果始祖父类也没有, 就报错
4、超继承(super())
a、子类方法需要使用父类的方法,使用super().方法() 叫超继承
b、子类的初始化方法中调用父类初始化方法:super().__init__()
c、子类初始化方法中调用父类初始化传入的参数都属于子类的实例属性
5、getattr()和setattr()
1)getattr():可动态获取属性
获取属性值:getattr(obj,name)其中obj:实例,name:字符串,实例属性。
getattr(obj,name,value):可以判断属性是否存在,存在的话就输出属性的值,不存在的话就输出默认值value
2)setattr():设置属性
设置属性:setattr(obj,name,value)其中obj:实例,name:字符串,实例属性,value:属性值
如果不存在属性就会添加一个属性,存在属性就修改属性的值
三、类和对象的作用
1、类和对象可以帮我们存储各个不同函数需要用到的共同的变量(所谓的简单和复杂:最重要的是调用简单,因为定义逻辑只需要写一次,而调用可能需要调用上千次无数次)
即提高代码的复用性。
2、封装和信息的隐蔽:将相关数据和操作封装在一个对象中,形成一个基本的单位,各个对象之间相互独立,互不干扰;将对象中某些部分对外隐秘,即隐蔽其内部细节,只留下少量的接口,以便与外界联系,接收外界的消息,这样有利于数据安全,防止无关的人了解和修改数据