一、类的定义和使用
要点
- 使用 class 关键字声明类
- 在属性或方法前加__,表示私有属性或方法,外部无法直接访问
- 类内部定义的方法,参数中必须有self
class Player:
HP=100
MP=100
Lv=1
Altack=20
__Name="Hero"
def __init__(self,hp,mp,lv,altack,name):
self.HP=hp
self.MP=mp
self.Lv=lv
self.Altack=altack
def changeLv(self,tar):
self.Lv=tar
def __str__(self):
return "\n名称:"+self.__Name+", \n生命值:"+str(self.HP)+", \n魔法值:"+str(self.MP)+", \n等级:"+str(self.Lv)+", \n攻击力:"+str(self.Altack)
playerOne=Player(101,101,2,25,"张三")
playerOne.Name="张三"
print(playerOne.HP)
print(playerOne.MP)
print(playerOne.Lv)
print(playerOne.Altack)
playerOne.changeLv(5)
print("等级:",playerOne.Lv)
print("详情:",playerOne.__str__())
二、 类的继承
要点
- 在声明类时,参数中填写父类表示继承
- 允许多继承,用,进行分隔
- 当父类中有同名方法时,默认调用第一个父类的方法
class Player:
HP=100
MP=100
Lv=1
Altack=20
Name="Hero"
def __init__(self,name):
self.Name=name
def changeLv(self,tar):
self.Lv=tar
def __str__(self):
return "\n名称:"+self.Name+", \n生命值:"+str(self.HP)+", \n魔法值:"+str(self.MP)+", \n等级:"+str(self.Lv)+", \n攻击力:"+str(self.Altack)
class Position:
x=0
y=0
def changeLv(self,tar,info):
self.Lv=tar
class Player_FS(Player):
skill="暴风雪"
def __init__(self,name):
self.Name=name
self.HP=200
self.MP=150
def __str__(self):
return "\n名称:"+self.Name+", \n技能:"+self.skill+", \n生命值:"+str(self.HP)+", \n魔法值:"+str(self.MP)
playerOne=Player_FS("李四")
class Player_FS_MP(Position,Player):
def __init__(self,name):
super().__init__(name)
self.x=10
self.y=20
def __str__(self):
return "\n名称:"+self.Name+", \n生命值:"+str(self.HP)+", \n魔法值:"+str(self.MP)+"\n等级"+str(self.Lv)+", \n坐标:("+str(self.x)+","+str(self.y)+")"
playerTwo=Player_FS_MP("王五")
playerTwo.changeLv(10,"info")
print("详情:",playerTwo.__str__())
class Player_ZS(Player,Position):
pass
class Player():
def move():
pass
def attack():
pass
三、类的复写
要点
- 子类可以复写父类方法
- 当父类中有同名方法时,super()默认调用第一个父类的方法
- 也可指定使用父类方法:Position.changeLv(self,tar,"战士")
- python允许复写系统函数
class Player:
HP=100
MP=100
Lv=1
Altack=20
Name="Hero"
def __init__(self,name):
self.Name=name
def changeLv(self,tar):
self.Lv=tar
def __str__(self):
return "\n名称:"+self.Name+", \n生命值:"+str(self.HP)+", \n魔法值:"+str(self.MP)+", \n等级:"+str(self.Lv)+", \n攻击力:"+str(self.Altack)
class Position:
x=0
y=0
def changeLv(self,tar,info):
self.Lv=tar
class Player_ZS(Player,Position):
def changeLv(self, tar):
print(f"战士{self.Name}升级了")
super().changeLv(tar)
Position.changeLv(self,tar,"战士")
print(super().x)
playerOne=Player_ZS("张三")
playerOne.changeLv(2)
def print(str):
pass
print("hello world")
四、 类型注解
要点
- Python 不会强制变量类型,注解仅作为提示(运行时忽略)
from typing import Union
age:int=18
age=18
print(type(age))
myList:list[int,str]=[1,'hello']
def add(a:int,b:int)->int:
return a+b
myList:list[Union[int,bool]]=[1,True,False,2,4]
五、类的多态
class Player:
def skill(self):
print("释放技能")
class Player_FS(Player):
def skill(self):
print("释放暴风雪")
class Player_ZS(Player):
def skill(self):
print("释放旋风斩")
def useSkill(tarPlayer:Player):
print("useSkill")
tarPlayer.skill()
Player1 = Player_FS()
Player2 = Player_ZS()
useSkill(Player1)
useSkill(Player2)