面向对象:继承与派生
Posted py-xiaoqiang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象:继承与派生相关的知识,希望对你有一定的参考价值。
7.4 继承:减少类之间的冗余
什么是继承? + 继承指的是类与类之间的关系,是一种什么“是”什么的关系
- 继承的作用:
- 解决代码重用问题
继承是一种创建新类的方式,在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
7.5 派生
在子类中加入子类特有的属性和方法,就是派生
这里对派生属性的性查找顺序依然是:对象>类>父类...>最上级父类>报错
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)
以上是关于面向对象:继承与派生的主要内容,如果未能解决你的问题,请参考以下文章