#类#
类是一类事物的抽象,它定义了一类事物的属性和功能。
类由类名、属性和方法三部分构成。
对于方法的理解,我更偏向于功能,即这个类的作用
class 类名:
def 方法名:
方法体
对象
对象是类的一个实例,可以理解为得出的一个具体的东西
对象创建
变量=类名([参数列表])
对象的地址
创建对象的过程是在内存中开辟一块区域存储这个对象,这个内存区域由对应的地址
示例
因为类比较抽象,所以我们以大家众所周知的王者荣耀为例子!首先选英雄之前得有这个英雄,所以我们建立一个英雄这个类,用于保存我们的英雄角色
代码演示
class Hero: #建立 Hero 这个类名
def 平A(self): # 平A 就是方法名,也就是这个英雄的功能,self是必须的(固定格式)
print('进行一次攻击')def Q技能(self):
print('释放Q技能')def R技能(self):
print('释放R技能')哪吒 = Hero() #对象创建,建立一个具体的变量,也就是我们要选的英雄哪吒
哪吒.平A() #使用英雄类里面的功能哪吒.Q技能()
哪吒.R技能()
结果演示
__init__构造方法
init构造方法的作用是在创建一个类的对象时,对对象进行一些初始化操作,在创建对象时会自动被调用,简单来说,就是类默认含有的
示例
依然用王者荣耀的英雄为例,简单来说,__init__就是英雄本身的属性,例如血量,名字,移速之类的
代码演示
class Hero:
def __init__(self,name,HP,speed): #建立英雄默认含有的属性
print('英雄登场')
self.NAME=name #用大小写区分更好的区分name和NAME#参数要先传递后才能别调用
print('英雄名称:{}'.format(self.NAME)) #用format表示字符串
self.HP = HP
print('英雄血量:%d'%self.HP) #用%d表示数字
self.SPEED = speed
print('英雄移速:%d'%self.HP)
def 平A(self):
print('进行一次攻击')def Q技能(self):
print('释放Q技能')def R技能(self):
print('释放R技能')哪吒 = Hero('哪吒',500,100) #要一一对应name,HP,speed
哪吒.平A()
哪吒.Q技能()
哪吒.R技能()
结果演示
#继承#
单继承
子类只继承一个父类
class son(father)
构造方法
如果子类在构建时没有没有定义构造方法,则子类会自动调用父类的构造方法
在子类中调用父类
①父类名.方法名[self[,参数列表]]
②super().方法名()
示例①
代码演示
class father:
def __init__(self):
print('我是爸爸')
def money(self):
print('我的工资是8000')class son(father):
def money(self):
father.money(self) #用 父类名.方法名[self[,参数列表]] 的方法被子类调用
SON=son()
SON.money()
结果演示
结果顺便印证了子类在构建时没有没有定义构造方法,则子类会自动调用父类的构造方法
示例②
代码演示
删掉了父类的构造方法(因为觉得让示例的代码太长了)
class father:
def money(self):
print('我的工资是8000')class son(father):
def money(self):
super().money()
SON=son()
SON.money()
结果演示
重写
在子类中定义与父类同名的方法
示例
代码演示
class father:
def money(self):
print('我的工资是8000')
class son(father):
def money(self):
print('我的工资是10000')
SON=son()
SON.money()
结果演示
多继承
格式
class son(father1,father2)
同名问题
当子类和多个父类都拥有一样的方法名时,方法被调用的优先级如:son>father1>father2
可以使用 print(类名.__mro__) 的方法打印方法被调用的优先级
示例
代码演示
class father:
def money(self):
print('我的工资是8000')
class mother:
def money(self):
print('我的工资是7000')
class son(father,mother):
def money(self):
print('我的工资是10000')
SON=son()
SON.money()print(son.__mro__)
结果演示
由此可见,当子类和多个父类都拥有一样的方法名时,优先调用子类,其次是father1>father2