类的定义方法
基本语法:
class 类名[(父类)]:
属性块 #这里可以定义类中的一些属性,定义方法为:属性名=属性值
def __init__(self[,参数]) #构造函数
函数体
def 方法名(self[,参数]): #可以定义类所属的其它方法
方法体
实例: 定义Person类
class Person:
def __init__(self,name,age,height): #这里self指的是对象,相当于其它语言中的this关键字
self.name=name
self.age=age
self.height = height
def getName(self): #定义一个getName方法
return self.name
类的实例化及调用类中方法等
类实例化的基本语法为:对象名 = 类名([参数])
对象的功能:
- 查看属性
- 调用方法
- dict()可用来修改和查询对象对应的属性值
类名的功能:
- 实例化
- 调用方法,不过自己要传递self参数
- 调用类中的属性,如:
Person.country;
也就是调用静态属性 - 方法一般情况下必须传self参数,且必须为第一个位置。类名可以查看类中的属性,而不需要实例化,类名还可以实例化对象。
python中的继承简介
1、面向对象的三大特性:继承、多态、封装
2、继承:继承是创建新类的一种方式,在python中,一个新建的类可以继承一个或多个父类,父类也称基类或超类,新建的类也称子类或派生类
3、python不仅支持单继承,而且还支持多继承,在python中,多继承时其继承顺序是按找广度优先的顺序来继承的(python3中均为新式类);并且在新式类中,类名.mro()
方法可以查看新式类继承的优先顺序
4、单继承下,python在子类调用父类的属性和方法相关:
- 在子类中,通过
super().__init__(父类初始化方法参数列表)
这种语法调用父类的动态属性(即写在init方法中的属性) - 在子类中,通过
super.属性名
可以调用父类中的属性(直接写在父类下的类属性,而非写在init方法下的实例对象属性) - python多继承情况下访问父类中的内容相关:
首先,在多个类均有相同的方法或属性时,python的新式类(python老版本需要显示继承object类,新版本默认继承object类)默认按照广度优先的顺序进行继承(老式类是按照深度优先继承的),即在使用super调用相关内容时,也是按照广度优先的顺序,调用相关类中的方法或属性。而如果需要使用指定的某个父类中的方法或属性,需要以类名.方法名()
和类名.属性名
的格式来调用,并且在调用方法时需要加上self参数, 因为super关键字调用的是默认继承到的内容。
self和cls的区别
python中cls
参数指的是类本身,而self指的是对象本身
python中为对象添加属性的方法
- 在对象创建好后,通过
对象名.属性名=属性值
的格式进行添加 - 在对象初始化函数
__init__()
中添加,格式为self.属性名=属性值
,属性值用户可以通过构造方法的参数传入,python解释器会自动调用初始化函数,并将构造方法中传入的数据传入初始化方法中进行初始化。 - python中
__new__()
方法解析:该方法的祖先是object类提供的__new__方法,其用来创建一个对象,调用该方法时,需要传入一个参数(类型名),用来指定要创建那个类的对象,然后该方法会将创建好的对象返回。 - 通过反射进行添加,方法为setattr,具体参见反射。
python中的析构函数
python中的析构函数为:__del()__
python中__new__()方法的解析
该方法的祖先是object类提供的__new__方法,其用来创建一个对象,调用该方法时,需要传入一个参数(类型名),用来指定要创建那个类的对象,然后该方法会将创建好的对象返回。