继承
程序是什么?程序是用来解决实际问题的,也可以说是对现实世界的一种量化,一种现实世界的映射。
在实际生活中有子承父业的说法,在程序世界中有没有呢?答案是有的。
什么是继承
子承父业是继承,继承是一种关系,两个人之间的关系。在程序世界中的映射是怎样的呢?程序中的继承也是一种关系,是两个类之间的关系。既然是两个类之间的关系,就需要确定一下继承顺序,类比现实世界,程序中的被继承者类称为父类或基类,继承者类称为子类或派生类。
继承的格式
class Animal(object):
pass
# class 类名(父类名):
# 方法列表
所有的类都继承 object 类,object 类是所有类的父类或基类。
单继承
什么是单继承
单继承,只有一个直接父类的类,称为单继承。
class 类名(父类名):
pass
多继承
与单继承相对的是单继承,有多个直接父类,称为多继承
class 类名(父类名1,父类名2,父类名3.... 父类名n):
pass
多层继承
多层继承和多继承的区别 多继承,横向,就像是一片地上有很多高楼一样。多层继承,纵向,一栋高楼有很多层。
class Animal(object):
pass
class Dog(Animal):
pass
多层继承
Dog 继承自 Animal,Animal继承自 object,object 是所有类的父类
重写
方法的重写
什么是重写
在子类中创建一个方法,和父类中的某个方法同名,就是重写(方法的重写或方法的覆写)
class Animal(object):
def eat(self):
print("动物吃东西")
class Dog(Animal):
def eat(self):
print("狗吃东西")
dog = Dog()
dog.eat() # 默认调用子类的方法
# 结果为:
# 狗吃东西
重写的作用
当父类中的方法不符合我们的需求时,可以通过重写,实现我们的需求。
方法可以重写,属性可不可以重写?答案是可以的
属性的重写
class Animal(object):
def __init__(self):
self.age = 120
class Dog(Animal):
def __init__(self):
self.age = 12
dog = Dog()
print("狗狗的年龄%d " % dog.age) # 默认调用子类的属性
# 结果为:
# 狗狗的年龄12
调用父类的方法
重写之后,如果发现父类的方法还有价值,可以调用父类的方法
通过父类名强制调用
一般用于多继承
class Animal(object):
def __init__(self):
self.age = 120
def eat(self):
print("动物吃东西")
class Dog(Animal):
def __init__(self):
self.age = 12
def eat(self):
print("狗吃东西")
Animal.eat(self) # 在重写的方法内强制调用 父类名.父类方法名() 如果需要参数,则需要传参
dog = Dog()
dog.eat()
# 结果为:
# 狗吃东西
# 动物吃东西
super() 兼容版
python2、python3 都可用
class Animal(object):
def __init__(self):
self.age = 120
def eat(self):
print("动物吃东西")
class Dog(Animal):
def __init__(self):
self.age = 12
def eat(self):
print("狗吃东西")
# 兼容版 super(子类名, 子类对象).父类方法() 如果需要参数,则需要传参
super(Dog, self).eat()
dog = Dog()
dog.eat()
# 结果为:
# 狗吃东西
# 动物吃东西
super()
python3 专属
class Animal(object):
def __init__(self):
self.age = 120
def eat(self):
print("动物吃东西")
class Dog(Animal):
def __init__(self):
self.age = 12
def eat(self):
print("狗吃东西")
super().eat() # super().方法名() 如果需要参数,则需要传参
dog = Dog()
dog.eat()
# 结果为:
# 狗吃东西
# 动物吃东西
到此结 DragonFang 2018.4.12
网友评论