什么是继承
继承是一种创建类的方法,一个类可以继承一个或多个父类,原始类称为基类或超类。
继承可以很方便的帮助子类拥有父类的属性和方法,减少代码冗余,子类可以定义自己的方法和属性,也可以覆盖父类的方法和属性。
实现继承
创建一个父类Animal,在父类中定义方法或属性:
class Animal():
def __init__(self, kind, age):
self.kind = kind
self.age = age
print("这是父类的__init__方法")
def info(self):
print('这是一只' + self.kind, ',今年' + self.age + '岁了')
animal = Animal('狗', '5')
animal.info()
# 这是父类的__init__方法
# 这是一只狗 ,今年5岁了
- 然后创建一个子类,继承上面的Animal父类,同时会继承父类的属性和方法:
class Cat(Animal):
pass # 不想向类中添加任何其他的属性或者方法,可以使用关键字pass
cat = Cat('猫','3')
cat.info()
# 这是父类的__init__方法
# 这是一只猫 ,今年3岁了
- 当子类继承了父类的__init__()方法后,会在创建对象时自动调用。
你可以在子类中重新创建一个__init__()方法,这样既可以继承父类的属性,又可以给这个子类添加新的属性:
class Cat(Animal):
def __init__(self, kind, age, name):
self.kind = kind
self.age = age
self.name = name
print("这是子类的__init__方法")
def info(self): # 如果在子类中添加一个父类同名的方法,会覆盖父类的方法
print('这是一只' + self.kind, ',今年' + self.age + '岁了', '它的名字是'+self.name)
cat = Cat('猫, '3', 'xixi')
cat.info()
# 这是子类的__init__方法
# 这是一只猫,今年3岁了 它的名字是xixi
如果你依然在编程的世界里迷茫,
不知道自己的未来规划,
对python感兴趣,
这里推荐一下我的学习交流圈QQ群:895 797 751,
里面都是学习python的,
如上所示,在子类中添加了一个info()方法,这是一个和父类中的方法同名的方法,会覆盖父类原有的方法。当你需要子类中用特殊或不同的功能时就可以这样做。
多继承
class DerivedClassName(Base1, Base2, Base3):
<statement-1>
...
<statement-N>
需要注意圆括号中基类(父类)的顺序,若是基类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找基类中是否包含方法。
class Parent(object):
def info(self):
print('This is Parent')
def show(self):
print("show time")
class A(Parent): # 继承Parent
def info(self): # 自动覆盖父类的此方法
print('This is A')
class B(Parent): # 继承Parent
def info(self):
print('This is B')
class C(A, B): # 继承A,B
pass
- 如下所示,创建A类的实例对象后,调用info()方法,输出的是This is A,因为A类自身的info方法会覆盖父类Parent中的info方法。
而用实例对象调用show()方法调用的是父类Parent中的方法,因为A类中没有这个方法,所以会去父类中查找。
a = A()
a.info()
# 输出:This is A
a.show()
# 输出:show time
- 类B和类A的情况是相似的:
b = B()
b.info()
# 输出:This is B
a.show()
# 输出:show time
- 而下面的代码中因为C类继承了两个父类,所以创建C的实例对象去调用info()方法时,需要注意一下这个info()方法是哪个父类中的方法。只要记住查找的顺序是从左至右就可以了,所以最终调用的是父类A中的info()方法。
c = C()
c.info()
# 输出: This is A