马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 极品召唤兽 于 2020-8-21 21:06 编辑
类的继承
格式 class 子(父):
子代会继承(复制)父代全部的属性和方法
类的多层继承
(禁止套娃)
看代码
class Human:
arms = 2
legs = 2
hair = '各种颜色的头发'
def walk(self):
print('直立行走')
def speak(self):
print('说着各式各样的语言')
class Chinese(Human):
pass
class JiangSu(Chinese):
pass
xiaobei = JiangSu()
print(xiaobei.arms)
# 输出:2
xiaobei.walk()
# 输出:直立行走
连环套....
类的多重继承
除了继承一个类,我们还可以同时继承多个类,语法是 class 类 A(类 B, 类 C, 类 D):。我们以出生在美国的中国人(ABC,American Born Chinese)为例:
class Chinese:
hair = '黑头发'
skin = '黄皮肤'
def speak_chinese(self):
print('说汉语')
class American:
hair = '金头发'
skin = '白皮肤'
def speak_english(self):
print('说英语')
class ABC(Chinese, American):
pass
abc = ABC()
print(abc.hair)
# 输出:黑头发
print(abc.skin)
# 输出:黄皮肤
abc.speak_chinese()
# 输出:说汉语
abc.speak_english()
# 输出:说英语
这是因为 class ABC(Chinese, American): 中 Chinese 靠前,调用实例的属性和方法时会优先在子类中查找,找不到再从最左侧的父类依次往右查找,直到找到为止,如果都没有找到则会报错。
类的定制
既然子类继承父类的所有属性和方法,它俩是一样的,为什么不直接使用父类呢?因为类除了可以继承之外,还可以进行定制!我们可以在父类的基础上做以下两点定制:
class Human:
arms = 2
legs = 2
hair = '各种颜色的头发'
def walk(self):
print('直立行走')
def speak(self):
print('说着各式各样的语言')
class Chinese(Human):
hair = '黑头发'
skin = '黄皮肤'
def speak(self):
print('说汉语')
def eat(self):
print('吃米饭')
xiaobei = Chinese()
print(xiaobei.arms)
# 输出:2
print(xiaobei.hair)
# 输出:黑头发
print(xiaobei.skin)
# 输出:黄皮肤
xiaobei.walk()
# 输出:直立行走
xiaobei.speak()
# 输出:说汉语
xiaobei.eat()
# 输出:吃米饭
我们可以看到,Chinese 类在 Human 类的基础上新增了 skin 属性和 eat() 方法,并且 Chinese 类自己的 hair 属性和 speak() 方法覆盖了 Human 类中对应的属性和方法。这就是类的定制的两个特点:新增 和 重写。
注意点
定义类的方法时,第一个参数 self 不能丢,调用方法时要忽略;
self 作用是代替实例本身,在类中访问类的属性和方法;
初始化方法 __init__() 在类实例化时会自动执行,一般用于类属性的初始化;
子类可以继承父类的所有属性和方法,并且可以定制自己的属性和方法。
x小游戏x
决战 紫禁之巅...from random import randint, random
class Player:
def __init__(self, name):
self.name = name
self.health = 100
def attack(self, target):
print(self.name + '发起攻击')
damage = randint(10, 20)
target.defend(damage)
def defend(self, damage):
# 补全 defend() 方法
if random() > 0.2 :
self.health -= damage
print('%s受到%d点伤害,血量剩余%s'%(self.name,damage,self.health))
if self.health <= 0:
print(self.name+'被击败')
else:
print(self.name+'防御成功')
print('--------------------')
kakarotto = Player('卡卡罗特')
piccolo = Player('比克大魔王')
# 使用循环轮番攻击,当有人被击败后停止循环
while True :
if kakarotto.health > 0:
kakarotto.attack(piccolo)
else:
break
if piccolo.health > 0:
piccolo.attack(kakarotto)
else :
break
下面即将进入项目实践了0...0
害怕+1
|