面向对象编程 (OOP),英语全称:Object Oriented Programming,面向对象编程的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 继承,其实这样理解,就是我写了一个爸爸类和儿子类,爸爸有钱,儿子却没钱,于是儿子决定继承爸爸,调用爸爸的钱(爸爸类的变量和方法)。 继承一个类,基本使用下面的五个方法。
1、直接调用父类属性方法
爸爸有钱,儿子却没钱,于是儿子用爸爸的钱
class Father():
def __init__(self):
self.money= 1000
def action(self):
print('调用父类的方法')
class Son(Father):
pass
son=Son() # 子类Son 继承父类Father的所有属性和方法
son.action() # 调用父类属性
输出:调用父类的方法
son.money # 调用父类属性
输出:1000
2、强制调用父类私有属性方法
爸爸说,你这个儿子,老是用我的钱,我决定藏私房钱。儿子试试super()拿你的私房钱,但是这里需要注意super()强制调用父类私有属性方法,就是重写方法,私有变量是不能用supper继承不了,还不可以访问父类中的私有属性方法的变量,就是儿子是拿不了私房钱的。
class Father():
__money = 1000 #私有变量是继承不了
def __action(self): # 父类的私有方法
money = 1000
print('调用父类的方法')
class Son(Father):
def action(self):
super()._Father__action()
print(money)
son=Son()
son.action()
调用父类的方法
name 'money' is not defined
3、重写父类属性方法
突然间儿子竟然有钱,决定不用爸爸的钱,用自己的钱,决定重写父类属性方法。
class Father():
def __init__(self):
self.money = 0
def action(self):
print('调用父类的方法')
class Son(Father):
def __init__(self):
self.money = 1000
def action(self):
print('子类重写父类的方法')
son=Son() # 子类Son继承父类Father的所有属性和方法
son.action() # 子类Son调用自身的action方法而不是父类的action方法
son.money # 自己的1000
4、调用父类的init方法
如果爸爸把钱放在__init__,儿子有没有可能拿到爸爸的钱,都不是私有变量,就不是私房钱,当然可以拿到 我们先看看如果不用super,能不能拿到。
class Father():
def __init__(self):
self.money = 1000
class Son(Father):
def __init__(self):
pass
son=Son()
print(son.money)
# 报错:'Son' object has no attribute 'money'
连super不用就像拿钱,太小看你爸爸我了。
class Father():
def __init__(self):
self.money = 1000
class Son(Father):
def __init__(self):
super().__init__()
#也可以用 Father.__init__(self) 这里面的self一定要加上(上面两个相同)
son=Son()
print(son.money)
1000
5、继承父类初始化过程中的参数
有的时候,爸爸需要挣钱和花钱,就是我们初始化过程中的参数,儿子很好奇,决定看看爸爸口袋还要多少钱。 我们这里先写死了earn_money和spend_money
class Father():
def __init__(self):
self.earn_money=1000
self.spend_money= -500
class Son(Father):
def __init__(self):
super().__init__()
#也可以用 Father.__init__(self) 这里面的self一定要加上
def add(self):
return self.earn_money+self.spend_money
son=Son()
print(son.add())
500
儿子发现爸爸钱不够,于是偷偷的拿了点钱过来。
class Father():
def __init__(self,a,b):
self.earn_money = a
self.spend_money= b
def add(self):
return self.a + self.b
#调用父类初始化参数a,b并增加额外参数c
class Son(Father):
def __init__(self,a,b,c=1000): # c固定值
Father.__init__(self,a,b)
self.son_money = c
def add(self):
return self.earn_money+self.spend_money + self.son_money
son=Son(1000,-500) # 所以c可以不用显示表达出来
print(son.add()) # 调用子类add函数
1500
以上基本涵盖了Python类的继承,调用父类的属性和方法基础内容,可以自己动手写些案例,加深理解。
文源网络,仅供学习之用,如有侵权,联系删除。
我将优质的技术文章和经验总结都汇集在了我的公众号【Python圈子】里。
在学习Python的道路上肯定会遇见困难,别慌,我这里有一套学习资料,包含40+本电子书,600+个教学视频,涉及Python基础、爬虫、框架、数据分析、机器学习等,不怕你学不会!还有学习交流群,一起学习进步~
来源:oschina
链接:https://my.oschina.net/u/4477231/blog/3221642