开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第15天,点击查看活动详情
继承在面向对象中也是一个重要的概念,通过前几篇文章的介绍,我们知道类的定位为class 类名: ,这里有一个重要的概念就是Python中所有的类都继承Object类,这一点和Java是一样的,所以我们同样可以把类定义为class 类名(object): ,子类会继承父类的所有属性和方法。
继承
那么继承在Python中是怎么书写的呢?通过下面这个例子我想你就会使用继承了。
class Cxk(object):
def __init__(self):
self.food = '油饼'
def say(self):
print(f'食不食{self.food}')
class Ikun(Cxk):
pass
ikun = Ikun()
ikun.say()
这段代码中我们先定义父类Cxk,在父类中我们使用了魔法函数初始化函数,然后定义了一个say方法。此类是Ikun,他继承哪个类就在括号里写上父类的名字,然后写上关键字pass就可以了,这里的Ikun继承的Cxk类,我们前面说到子类会继承父类的所有的属性和方法,所以在下面对象下面的代码中,我们创建了Ikun对象,然后调用父类的say()方法就可以输出内容:食不食油饼。
子类可以继承多个父类
当然一个子类也可以继承多个父类,这一点和Java不同,Java中一个子类只能继承一个父类,所以吕布在Python中是混得开的,哈。当子类继承的父类们出现相同的属性和方法的时候,默认会使用第一个父类中的属性和方法。继承多个父类的书写方法是类似class Lvbu(Dingyuan, Dongzhuo,Wangyun): 父类都写在括号内,多个父类通过逗号隔开
权限控制
你有没有想过,子类把父类的属性和方法全都接收了,那父类能不能有点自己的隐私,不给子类可不可以,当然可以,只需要在属性前加两个下划线就表示这是私有属性和方法,子类不可继承和访问,如果真的需要访问的话需要父类提供相应的非私有方法来供子类使用,比如这种:
def get_money(self):
return self.__money
def set_money(self,money):
self.__money = money
类中定义了两个非私有方法,供实例调用获取私有属性money
super()方法
super()方法是一个非常好用的可以调用父类的函数,书写方式为super().方法,使用super()函数不仅简化我们的代码,还做到了解耦。
小结
这里我们介绍了Python继承中一些知识点,最大的特点是子类可以继承多个父类,同时我们介绍了其他的知识点,比如私有属性和私有方法的定义,super()方法的使用等等内容。内容虽然有点杂有点多,但是都是很重要的点。