美文网首页
Python面向对象继承

Python面向对象继承

作者: b8a7c7695f14 | 来源:发表于2020-04-05 14:03 被阅读0次
    image

    面向对象继承

    面向对象编程 (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面向对象继承

          本文链接:https://www.haomeiwen.com/subject/fnjuphtx.html