类
用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
例如:
人是一种类型,拥有年龄、身高、体重、性别等属性。具体一个人是一个对象,例如小明;小明有年龄、身高、体重、性别等属性。小红也是人,所以具有相同属性。
类变量
类变量在整个实例化的对象中是公用的。或者可以理解为属性。
创建一个人的类,类里面有类变量,使用类变量记录人的年龄、性别、身高等属性。
类的定义:
class HumanClass:age=1sex='未知'stature=60weight=3
以上类我定义了一个年龄为1,年龄为未知,身高为60,体重为3的类。
类的定义使用class开头,后面接类名,然后冒号结束;类里面的属性定义需要使用缩进,表示代码块。
类方法
类中定义的函数。
例如狗有个方法就是发声,汪汪叫;定一个方法用来输出汪汪,模拟狗的叫声。
class AnimalClass:age=0sex='未知'ismammal=0sound='呜呜叫'def say(self):print(self.sound)
以上代码定义了一个动物类,名为AnimalClass,其中有类变量(或说属性),age代表年龄、sex代表性别、sound代表发出的声音、ismammal代表是否是哺乳动物,0代表不是,1代表是;定义了一个函数,类里面的函数跟外面的自定义函数定义类似,这个函数输出sound变量。
函数里面默认传入一个self,默认代表类本身,如果调用sound不使用self,那么这个类方法将会不识别,不认识sound变量,传入self后,使用self运用点“.”运算符可以获取到当前类的sound变量。
我们新建一个对象:
class AnimalClass:age=0sex='未知'ismammal=0sound='呜呜叫'def say(self):print(self.sound)dog = AnimalClass()
dog.say()
这个时候dog为AnimaClass的对象,拥有这个类里面的所有属性和方法。我们使用dog调用say(),也就是dog这个对象使用say方法,在AnimalClass类中,say函数是输出叫声的文字,那么结果将会显示出叫声“呜呜叫”。
查看结果:
我们可以直接使用dog这个对象使用点“.”运算符获取它自身的属性sound,配合print()函数作为输出,也一样可以达到效果:
class AnimalClass:age=0sex='未知'ismammal=0sound='呜呜叫'def say(self):print(self.sound)dog = AnimalClass()
dog.say()
print(dog.sound)
结果如下:
继承
即一个派生类继承基类的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。
派生类:例如我们创建一个类是动物,动物的基本属性有毛发、眼睛、呼吸器官等。我们创建一个鸟的类别,继承了动物类,那么鸟这个类别是动物;在这里鸟就是派生类,动物就是基类。
class AnimalClass:age=0sex='未知'ismammal=0sound='呜呜叫'def say(self):print(self.sound)class BirdClass(AnimalClass):sound='唧唧叫'
maque=BirdClass()
maque.say()
以上代码我们新建了一个BirdClass鸟的对象,在BirdClass类后面使用一个圆括号,圆括号里面的是基类,这个类继承AnimalClass这个类,拥有这个对象的属性和方法。所以在BirdClass中没有看到其它方法和变量,只有一个sound把呜呜叫改成了唧唧叫,毕竟是鸟,一般都是唧唧叫吧。
在这里重新给sound赋值叫做重写,我们重写了其中一个属性。不仅类变量可以重写,方法也可以重写。
类方法重写
如果从父类继承的方法不能满足子类的需求,可以
对其进行改写,这个过程叫方法的覆盖,也称为方
法的重写。
在这里我们并没有重写say方法,但是BirdClass还是继承了基类的方法。我们新建了一个BirdClass的对象maque(麻雀),使用maque调用say方法,结果如下:
结果是“唧唧叫”,因为我们在BirdClass类中重写了叫声sound变量。
接下来我们尝试一下方法重写。
class AnimalClass:age=0sex='未知'ismammal=0sound='呜呜叫'def say(self):print(self.sound)class BirdClass(AnimalClass):sound='唧唧叫'def say(self):print('我是鸟类,我会',self.sound)
maque=BirdClass()
maque.say()
以上代码在BirdClass类中重写了say方法,在print中添加了’我是鸟类,我会’,字符串。
查看运行结果