通俗讲解让你秒懂Python里的面向对象继承

1,071 阅读4分钟

面向对象编程 (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基础、爬虫、框架、数据分析、机器学习等,不怕你学不会!还有学习交流群,一起学习进步~

file