参考:
https://turingplanet.org/2019/09/21/%e7%b1%bb-class/#lei_he_shi_li_Class_Instance
书《深度学习之Pytorch实战计算机视觉》
什么是“类”?
类是用来描述具有相同属性和方法的对象的集合,定义了该集合中每个对象所共有的属性和方法,对象则是类的实例;
每个类都有自己的属性(attribute)(如:一个人的身高、体重、年龄)和方法(method)(如:吃饭、说话、刷牙)
注意:class
(类)的外部函数叫做函数function,类的内部函数叫做方法method;
一、类的创建
1、类 class 的创建及演示
说明:
Python中使用class
关键词来创建“类”,在class
关键词之后紧接着类的名称,名称首字母推荐大写,以冒号 :结尾,换行缩进后紧跟“属性”和“方法”的定义,属性就是一个变量的定义,而方法的定义和函数的定义是一样的,也是以def
开头;
在类的创建过程中需要注意的如下事项:
- 类变量:在创建的类中会定义一些变量,我们把这些变量叫作类变量,类变量的值在这个类的所有实例之间是共享的,同时内部类或者外部类也能对这个变量的值进行访问。
__init__()
:是类的初始化方法,我们在创建一个类的实例时 就会调用一次这个方法。self
:代表类的实例,在定义类的方法时是必须要有的,但是在调用时不必传入参数。
演示:
类的定义是一个具体实例(instance)的设计蓝图,在创建实例的时候,我们只要调用类名,然后加括号就可以了。在方法——greet
中,我们使用了特殊参数self,它永远指向创建的实例本身,所以self.name
就会指向当前被创建实例的name
属性。p1.greet()是方法调用的示范,我们只要在实例名后加上句号(.)紧跟着方法名,即可调用实例的方法。
2、类 class 的修改及演示
修改:
我们也可以在创建实例之后,对其属性和方法进行修改:
# 修改对象属性值 p1.age = 40 # 删除对象属性值 del p1.age # 删除对象 del p1
演示:
1、修改对象属性值
2、删除对象属性值
3、类 class 的初始化
初始化:
__init__
是 Python 中的特殊“方法”(special method),它用于初始化对象;
创建实例时它是最先被调用的函数,并且每次创建实例,它的__init__
都会被调用,而且它的第一个参数永远是 self
,指向创建的实例本身。(init是initial的简写,顾名思义就是用来初始化的)
演示:
也可以在__init__
方法中添加其他参数,这样我们的的初始化能更加灵活和方便,同时在创建实例的时候,需要传入与__init__
方法匹配的参数:(下面例子中从S1
到S2
就是初始化的过程)
二、类的继承
1、继承
说明:
可以将继承理解为:在面向对象编程中,已经创建了一个类,又想再创建一个与之相似的新的类(比如添加几个方法,或者修改原来的方法;这时不必从头开始,可从原来的类派生出一个新的类,即新的类继承了原来的类),通过继承,新的类获得另一个类的所有方法,被继承的类叫作父类,进行继承的类叫作子类,子类继承了父类的所有数据和方法。(颜色相同,属性相同)
这样可以有效解决代码重用问题。
需要注意:(这里没太看明白)
- 当一个类被继承时,这个类中的类初始化方法不会被自动调用,所以需要在子类中重新定义类的初始化方法;
- 使用 Python代码调用某个“方法”时,默认先在所在的类中进行查找,如果没有找到,则判断所在的类是否为子类,如果为子类,就继续到父类中查找。
演示:
父类演示:
加入子类:
下面是第二种程序方法,供参考:
定义父类:
加入子类:
2、多态
说明:
多态是指对不同类型的参数进行相同的操作,根据对象(或类)类型的不同而表现出不同的行为;
继承可以拿到父类的所有数据和方法,子类可以重写父类的方法,也可以新增自己特有的方法(有了继承,才有了多态,这样才能实现为不同的数据类型的实体提供统一的接口)。
演示:
三、类的重写
说明:
在继承一个类之后,父类中的很多方法或许就不能满足我们现有的需求了,这时就要对类进行重写;
演示: