
一、继承的概念
在现实生活中,继承一般指的是子女继承父辈的财产,在程序中,继承描述的是事物之间的所属关系,例如猫和狗都属于动物,程序中便可以描述为猫和狗继承自动物;同理,波斯猫和巴厘猫都继承自猫,而沙皮狗和斑点狗都继承足够,如下如所示:

二、继承的示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | class Cat(object):
def __init__(self,name,color= "白色" ):
self.name = name
self.color = color
def run(self):
print ( "%s:在跑" %self.name)
class Bosi(Cat):
def setNewName(self,newName):
self.name = newName
def eat(self):
print ( "%s:在吃" %self.name)
bs = Bosi( "波斯猫" )
print ( "bs的名字是:%s,颜色是:%s" %(bs.name,bs.color))
bs.eat()
bs.setNewName( "汤姆猫" )
bs.run()
|
运行结果为:
1 2 3 | bs的名字是:波斯猫,颜色是:白色
波斯猫:在吃
汤姆猫:在跑
|
相关推荐:《Python视频教程》
说明:
1.虽然子类没有定义__init__()方法,但是父类有。所以在子类集成父类的时候这个方法就被继承了,所以只要创建Bosi的对象,就默认执行了那个继承过来的__init__()方法。
2.子类在继承的时候,在定义类时,小括号()中为父类的名字。
3.父类的所有非私有的属性、方法、会被继承给子类。
注意:
1.私有的属性,不能通过对象直接访问,但是可以通过方法访问。
2.私有的方法,不能通过对象直接访问。
3.私有的属性、方法,不会被子类继承,也不能被访问。
4.一般情况下,私有的属性、方法都是不对外公布的,往往用来做内部的事情,起到安全的作用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | class Animal(object):
def __init__(self, name = "动物" ,color = "白色" ):
self.__name = name
self.color = color
def __test1(self):
print (self.__name)
print (self.color)
def test2(self):
print (self.__name)
print (self.color)
class Dog(Animal):
def dogTest1(self):
#不能访问父类的私有属性:AttributeError: 'Animal' object has no attribute '__name'
# print (self.__name)
print (self.color)
def dogTest2(self):
#self.__test1()
self.test2()
A = Animal()
# print (A.__name)
print (A.color)
#不能访问父类的私有方法:AttributeError: 'Animal' object has no attribute '__test1'
#A.__test1()
A.test2()
print ( "-----------------分割线-----------------" )
D = Dog(name= "阿黄" ,color = "黄色" )
D.dogTest1()
D.dogTest2()
|
运行结果为:
1 2 3 4 5 6 7 | 白色
动物
白色
-----------------分割线-----------------
黄色
阿黄
黄色
|
三、多继承

从图中能够看出,所谓多继承,即子类有多个父类,并且具有它们的特征。
Python中多继承的格式如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 | class A:
def printA(self):
print ( "---A---" )
class B:
def printB(self):
print ( "---B---" )
#定义一个子类继承A,B
class C(A,B):
def printC(self):
print ( "---C---" )
obj_C = C()
obj_C.printA()
obj_C.printB()
|
运行结果为:
说明
1.python中是可以多继承的。
2.父类中的方法、属性,子类会继承。
3.如果多个父类中有同一个方法,谁写在前面就调用谁的方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class A:
def printA(self):
print ( "---A---" )
class B:
def printB(self):
print ( "---B---" )
#定义一个子类继承A,B
class C(A,B):
def printC(self):
print ( "---C---" )
obj_C = C()
obj_C.printA()
obj_C.printB()
#可以查看一个雷的对象搜索方法时的先后顺序
print (C.__mro__)
|
运行结果为:
1 2 3 | ---A---
---B---
(< class '__main__.C' >, < class '__main__.A' >, < class '__main__.B' >, < class 'object' >)
|