标签:tac kill 父类 类之间的关系 并且 没有 skill subclass att
什么是继承? + 继承指的是类与类之间的关系,是一种什么“是”什么的关系
继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可以称为基类或超类,新建的类称为派生类或子类。
类继承例:
class Parentclass1:
pass
class Parentclass2:
pass
class Subclass1(Parentclass1): # 继承一个类
pass
class Subclass2(Parentclass1,Parentclass2): # 继承多个类
pass
# 查看继承关系
print(Subclass1.__bases__) # (<class '__main__.Parentclass1'>,)
print(Subclass2.__bases__) # (<class '__main__.Parentclass1'>, <class '__main__.Parentclass2'>)
把子类们都具有的共同的属性和方法,统一写在父类之中,以达到减少重复写同样代码
继承实例:
class Hero:
def __init__(self, nickname, hp, atk):
self.Nickname = nickname
self.Hp = hp
self.Atk = atk
def attack(self, enemy):
enemy.Hp -= self.Atk
class Gairun(Hero):
pass
class Reven(Hero):
pass
h1 = Gairun('a', 100, 10)
h2 = Reven('b', 70, 30)
print(h1.__dict__)
print(h2.__dict__)
h2.attack(h1)
print(h1.Hp)
属性查找例:
class Foo:
def f1(self):
print('from Foo.f1')
def f2(self):
print('from Foo.f2')
self.f1() # 这里self 是调用他的对象,b调用了他,所以self是b
class Bar(Foo):
def f1(self):
print('from Bar.f1')
b = Bar()
b.f1() # Bar类中有f1,所以调用Bar的f1
b.f2() # Bar类中没有f2,所以调用父类中的f2。父类f2中的f1的self是b,所以就是b.f1()
执行结果:
from Bar.f1
from Foo.f2
from Bar.f1
在子类中加入子类特有的属性和方法,就是派生
这里对派生属性的性查找顺序依然是:对象>类>父类...>最上级父类>报错
class Hero:
def __init__(self, nickname, hp, atk):
self.Nickname = nickname
self.Hp = hp
self.Atk = atk
def attack(self, enemy):
enemy.Hp -= self.Atk
class Gairun(Hero):
camp = 'Demacia' # 子类派生出的新数据属性
def attack(self, enemy): # 派生出的方法属性,并且这个属性覆盖了父类
print('from Geren Class')
def skill(self, enemy): # 派生出的方法
enemy.Hp -= (self.Atk * 2)
class Reven(Hero):
camp = 'Noxus'
pass
h1 = Gairun('a', 100, 10)
h2 = Reven('b', 70, 30)
print(h1.__dict__)
print(h2.__dict__)
h1.attack(h2) # 调用了同名的派生的方法
h1.skill(h2) # 调用了派生的方法
print(h2.Hp)
标签:tac kill 父类 类之间的关系 并且 没有 skill subclass att
原文地址:https://www.cnblogs.com/py-xiaoqiang/p/11210415.html