通过类,我们将同一类事物抽象化,然后可以通过实例化,创建出一个个具有不同特征值的对象,由于同一类事物具有相同的特征,因此,对于同类事物而言,我们不需要再分别写代码,只要进行不同参数的实例化就可以,从而提高了代码的组织性与可重用性。
有的时候,同一类事物还可以再分,比如人类分为男人、女人,汽车分为新能源车、燃油车,会员可以分为普通会员,付费会员, 对于这样的分类,我们也可以在大类的模版基础上,做一些细微的修改,创建一个新的模版,这种方式就是继承
,可以让代码更加高度组织化,封装,并降低代码的冗余.
继承是在一个类的基础上创建一个新类
,这种机制就叫继承
。
原来的类叫基类
或者父类
或者超类
,新创建的类叫子类
或者派生类
新类会从基类那里继承基类的所有属性与方法
所有的类都来源于object类
,称为根类
Python类继承语法
class ChildClassName(ParentClassName1, ParentClassName2....):
pass
Python类的继承示例
创建基类
# 男人、女人的都属于人类
# 创建一个Person基类
class Person:
legs = 2
sex = None
def __init__(self, name, age):
self.name = name
self.age = age
def eat(self):
print("人是铁,饭是钢,一天不吃饿的慌!")
通过继承创建子类
# 男人类
# 通过在定义类的时候,()内写入父类名称即可从父类继承属性
# 男人类与女人类都是继承自Person类,只是各自有一个不同的值的sex
class Man(Person):
sex = "男"
# 女人类
# 另外重新定义了eat
class Woman(Person):
sex = "女"
def eat(self):
print("细嚼慢咽")
子类实例化
现在通过创建Man与Woman两个类,就可以不用传sex了
# 直接实例化Man、Woman
zhangsan = Man("张三", 30)
cuihua = Woman("翠花", 18)
#子类属性继承
# 子类会继承所有来自父类的属性
print(zhangsan.legs)
print(cuihua.legs)
# 子类属性覆盖了父类的同名属性
print(Person.sex)
print(Man.sex)
print(Woman.sex)
print(zhangan.sex)
print(cuihua.sex)
子类方法重写
我们观察两个子类,他们都分别再次定义了eat
这个方法,在父类中存在同样的方法名,这种叫方法重写,通过方法重写,可以实现代码的灵活行,现在两个类分别重写了eat
方法后:
# 子类方法重写提高了封装代码的灵活性
zhangsan.eat()
# 输出 “狼吞虎咽”
cuihua.eat()
# 输出"细嚼慢咽"
# 重写Man的eat方法
class Man(Person):
sex = "男"
def eat(self):
print("狼吞虎咽")
# 实例化
zhangsan = Man("张三", 30)
print("zhangsan吃饭的样子:", zhangsan.eat())
子类继承练习
看是看不会的,这辈子都看不会,请将代码撸起来!
# 鸟类的特征包括:有一对翅膀、有一对脚、会叫
# 鸽子的叫声:咕咕, 脚的形状:无蹼
# 鸭子的叫声:嘎嘎, 脚的形状:有蹼
# 使用继承关系来描述他们
讨论区