-
1.什么是继承?
- 通过继承,我们可以从既有的类上衍生出新的类。如果程序的需求为仅修改或删除某项功能,此时不需要将该类的成员数据及成员函数重新写一遍,只需要“继承”原先已定义好的类就可以产生新的类了。
- 继承是指将现有类的属性和行为,经过修改或重写(Override)之后,就可产生出拥有新功能的类,这样可以大幅提升程序代码的可重用性(Reusability)。
-事实上,继承除了可重复利用之前开发过的类之外,最大的优势在于能够维持对象封装的特性。因为继承时不易改变已经设计完整的类,这样可以减少继承时类设计上的错误发生。
-
2.基本使用
class Person:
def __init__(self,name,age):
self.name = name
self.age = age
def say(self):
print("说话")
def play(self):
print("玩耍")
class Study(Person):
# 子类如果有构造函数,必须先调用父类的构造函数
def __init__(self,name,age,score):
super().__init__(name,age)
self.score = score
def study(self):
print("学习")
def play(self): # 代码重写,默认不继承父类中的play了
# super().play() # 执行父类中的f2方法,推荐使用
Person.play(self) # 执行父类中的f2方法,不推荐使用
print('study.play')
s1 = Study('张三',18,88)
s1.say()
s1.play()
- 3.多继承
-
python独有特性,java,C#等语言只有单继承
-
Python的类如果继承了多个类,那么其寻找方法的方式有两种,分别是:深度优先和广度优先
-
当类是经典类时,多继承情况下,会按照深度优先方式查找
-
当类是新式类时,多继承情况下,会按照广度优先方式查找
-
经典类和新式类,从字面上可以看出一个老一个新,新的必然包含了跟多的功能,也是之后推荐的写法,从写法上区分的话,如果 当前类或者父类继承了object类,那么该类便是新式类,否则便是经典类。
-
经典类继承示例
-
class D:
def bar(self):
print 'D.bar'
class C(D):
def bar(self):
print 'C.bar'
class B(D):
def bar(self):
print 'B.bar'
class A(B, C):
def bar(self):
print 'A.bar'
a = A()
# 执行bar方法时
# 首先去A类中查找,如果A类中没有,则继续去B类中找,如果B类中么有,则继续去D类中找,如果D类中么有,则继续去C类中找,如果还是未找到,则报错
# 所以,查找顺序:A --> B --> D --> C
# 在上述查找bar方法的过程中,一旦找到,则寻找过程立即中断,便不会再继续找了
a.bar()
- 新式类继承示例
class D(object):
def bar(self):
print 'D.bar'
class C(D):
def bar(self):
print 'C.bar'
class B(D):
def bar(self):
print 'B.bar'
class A(B, C):
def bar(self):
print 'A.bar'
a = A()
# 执行bar方法时
# 首先去A类中查找,如果A类中没有,则继续去B类中找,如果B类中么有,则继续去C类中找,如果C类中么有,则继续去D类中找,如果还是未找到,则报错
# 所以,查找顺序:A --> B --> C --> D
# 在上述查找bar方法的过程中,一旦找到,则寻找过程立即中断,便不会再继续找了
a.bar()
标签:bar,python,继承,class,面向对象,类中,print,self,def
From: https://www.cnblogs.com/xwltest/p/18372576