Python学习笔记七 (继承,重写)

继承

程序是什么?程序是用来解决实际问题的,也可以说是对现实世界的一种量化,一种现实世界的映射。
在实际生活中有子承父业的说法,在程序世界中有没有呢?答案是有的。

什么是继承

子承父业是继承,继承是一种关系,两个人之间的关系。在程序世界中的映射是怎样的呢?程序中的继承也是一种关系,是两个类之间的关系。既然是两个类之间的关系,就需要确定一下继承顺序,类比现实世界,程序中的被继承者类称为父类或基类,继承者类称为子类或派生类。

继承的格式


class Animal(object):  
    pass

# class 类名(父类名):
#    方法列表 

所有的类都继承 object 类,object 类是所有类的父类或基类。

单继承

什么是单继承

单继承,只有一个直接父类的类,称为单继承。


class 类名(父类名):  
    pass

多继承

与单继承相对的是单继承,有多个直接父类,称为多继承


class 类名(父类名1,父类名2,父类名3.... 父类名n):  
    pass

多层继承

多层继承和多继承的区别 多继承,横向,就像是一片地上有很多高楼一样。多层继承,纵向,一栋高楼有很多层。


class Animal(object):
    pass

class Dog(Animal):
    pass

多层继承

Dog 继承自 Animal,Animal继承自 object,object 是所有类的父类


重写

方法的重写

什么是重写

在子类中创建一个方法,和父类中的某个方法同名,就是重写(方法的重写或方法的覆写)


class Animal(object):
    def eat(self):
        print("动物吃东西")


class Dog(Animal):
    def eat(self):
        print("狗吃东西")


dog = Dog()
dog.eat()  # 默认调用子类的方法

# 结果为:
# 狗吃东西

重写的作用

当父类中的方法不符合我们的需求时,可以通过重写,实现我们的需求。

方法可以重写,属性可不可以重写?答案是可以的

属性的重写


class Animal(object):
    def __init__(self):
        self.age = 120


class Dog(Animal):
    def __init__(self):
        self.age = 12


dog = Dog()
print("狗狗的年龄%d " % dog.age)  # 默认调用子类的属性

# 结果为:
# 狗狗的年龄12 

调用父类的方法

重写之后,如果发现父类的方法还有价值,可以调用父类的方法

通过父类名强制调用

一般用于多继承


class Animal(object):
    def __init__(self):
        self.age = 120

    def eat(self):
        print("动物吃东西")


class Dog(Animal):
    def __init__(self):
        self.age = 12

    def eat(self):
        print("狗吃东西")
        Animal.eat(self)  # 在重写的方法内强制调用 父类名.父类方法名()   如果需要参数,则需要传参


dog = Dog()
dog.eat()  

# 结果为:
# 狗吃东西
# 动物吃东西

super() 兼容版

python2、python3 都可用


class Animal(object):
    def __init__(self):
        self.age = 120

    def eat(self):
        print("动物吃东西")


class Dog(Animal):
    def __init__(self):
        self.age = 12

    def eat(self):
        print("狗吃东西")

        # 兼容版 super(子类名, 子类对象).父类方法()   如果需要参数,则需要传参      
        super(Dog, self).eat()  


dog = Dog()
dog.eat()

# 结果为:
# 狗吃东西
# 动物吃东西

super()

python3 专属


class Animal(object):
    def __init__(self):
        self.age = 120

    def eat(self):
        print("动物吃东西")


class Dog(Animal):
    def __init__(self):
        self.age = 12

    def eat(self):
        print("狗吃东西")
        super().eat()  #  super().方法名()    如果需要参数,则需要传参


dog = Dog()
dog.eat()

# 结果为:
# 狗吃东西
# 动物吃东西


到此结   DragonFang   2018.4.12

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值