继承
python支持多继承,继承内容与继承顺序相关,所有的类都会默认继承object类
class A:
def __init__(self):
self.name = 'A'
def print_test(self):
print("This is A")
class B:
def __init__(self):
self.name = 'B'
class C(A, B):
def __init__(self):
super().__init__()
self.age = 20
def print_test(self):
super(C, self).print_test()
print("This is C")
c = C()
c.print_test()
# 调用属性或方法的查找顺序
print(C.__mro__)
#组合优于继承
class D:
def __init__(self):
self.a = A()
def print_test(self):
self.a.print_test()
print("This is D")
d = D()
d.print_test()
# isinstance(x, y)判断x是否是y的实例
# 对象是某个类的实例,就是它的父类的实例
print(isinstance(c, B))
print(isinstance(c, A))
print(isinstance(c, C))
# issubclass(x, y) 判断x是否是y的子类
print(issubclass(C, A))
模拟决斗
import random
class Sprite():
def __init__(self, name, power, blood):
self.name = name
self.power = power
self.blood = blood
def attack(self, enemy):
minus = random.randrange(self.power-5, self.power+5)
if enemy.has_living():
enemy.minus_blood(minus)
def minus_blood(self, num):
self.blood -= num
def has_living(self):
if self.blood > 0:
return True
else:
return False
m = Sprite("哥斯拉", 10, 100)
h = Sprite("凹凸曼", 12, 120)
while m.has_living() and h.has_living():
m.attack(h)
h.attack(m)
if m.has_living():
print(m.name + "获得胜利")
if h.has_living():
print(h.name + "获得胜利")
用继承重写决斗
import random
class Sprite():
def __init__(self, name, power, blood):
self.name = name
self.power = power
self.blood = blood
def attack(self, enemy):
minus = random.randrange(self.power-5, self.power+5)
if enemy.has_living():
enemy.minus_blood(minus)
def minus_blood(self, num):
self.blood -= num
def has_living(self):
if self.blood > 0:
return True
else:
return False
class Monster(Sprite):
pass
class Hero(Sprite):
def attack(self, enemy):
minus = random.randrange(self.power - 5, self.power + 5)
i = random.randrange(0,100)
if enemy.has_living():
if i < 50:
enemy.minus_blood(self.power + 200)
else:
enemy.minus_blood(minus)
m = Monster("哥斯拉", 10, 100)
h = Hero("凹凸曼", 12, 120)
while m.has_living() and h.has_living():
m.attack(h)
h.attack(m)
if m.has_living():
print(m.name + "获得胜利")
if h.has_living():
print(h.name + "获得胜利")