python语言基础(十三)面向对象编程(封装、继承、多态)

面向对象的三大特征:封装、继承、多态。

封装

封装是面向对象编程的一大特点,将属性和方法放到类的内部,通过对象访问属性或者方法,隐藏功能的实现细节,也可以设置访问权限。

class Student():
    def __init__(self,name,age):
        self.name = name     # 将属性封装到类的内部
        self.age = age
    def prin_info(self):
        print(self.name,self.age)

# 在同一个类创建多个对象之间,属性是互不干扰的
zs = Student('张三', 20)
ls = Student('李四',21)
zs.prin_info()
ls.prin_info()

继承(重点)

继承是一种创建新类的方式,如果子类需要复用父类的属性或者方法时,就可以使用继承。当然,子类也可以提供自己的属性和方法。
父类中已经有的方法,在子类中直接继承,不用再重写。避免重复造轮子,减少代码的冗余。

class Father():     # 父类 超类
    pass
class Son(Father):  # 子类 派生类
    pass

注意:在 python 中,新建的类可以继承一个或多个父类
继承作用:避免重复造轮子,减少代码的冗余

新式类与经典类

在 Python2 当中类分为新式类和经典类,如果有继承父类 object 则是新式类,否则为经典类。

class Test():       # 在python2中,经典类
    pass

class Test1(object):    #继承了object,在python2中,新式类
    pass

Test()
Test1()

但是在 Python3 当中,全部都是新式类,默认继承 object
练习:验证 Python3 中,全部都是新式类
实现思路:比较继承与无继承两个空类的成员是否一致
拓展方法:对象.dir() 查看对象的属性与方法

class Test():       # 在python2中,经典类
    pass

class Test1(object):    #继承了object,在python2中,新式类
    pass

d1 = Test()
d2 = Test1()
print(len(d1.__dir__()),d1.__dir__())  # 26个,两者方法完全一致
print(len(d2.__dir__()),d2.__dir__())  # 26个,两者方法完全一致

在object类中有很多的魔法方法,如init、str等等,创建的类直接继承了object类,可以使用object所有的方法。

单继承

从继承几个父类来划分,可以分为单继承和多继承
子类继承父类,则可以直接享受父类中已经封装好的方法
练习:用代码实现如下
在这里插入图片描述

实现代码如下

class Grandfather(object):
    def sleep(self):
        print('Grandfather sleep 11')

class Father(Grandfather):
    def eat(self):
        print('Father eat')

    def drink(self):
        print('Father drink')

class Son(Father):
    def study_python(self):
        print('Son study_python')

    def sleep(self):
        print('Son sleep 8')   # 当子类中有与父类名字相同的方法,就意味着对父类方法进行了重写

T = Son()
T.study_python()  # 自己的方法可以直接使用
T.eat()     # 通过子类的对象可以使用父类的方法, 子类中没有的,可以从父类中找
T.sleep()   # 子类中有就使用子类的方法;子类没有,去父类中找,父类中没有,则继续去父类的父类中去找

当对象调用方法时,查找顺序先从自身类找,如果自身没找到,则去父类找,父类无,再到父类的父类找,直到object类,若还无,则报错。这也称为深度优先机制
在这里插入图片描述

需要注意的是,当子类与父类拥有同名称的方法时,子类对象调用该方法优先执行自身的方法。那么实际上就是子类的方法覆盖父类的方法,也称为重写。
但是实际的开发中,遵循开放封闭原则。我们并不会完全的重写父类的方法,而是希望同时实现父类的功能。这时,我们就需要调用父类的方法了,可以通过 super()函数实现。

super()

super(type[, object-or-type]) 函数是用于调用父类(超类)的一个方法
type --> 类
object-or-type --> 对象或类,一般是 self
练习:继以上练习实现,在Son的sleep方法当中,调用父类的sleep方法。

class Grandfather(object):
    def sleep(self):
        print('Grandfather sleep 11')

class Father(Grandfather):
    pass

class Son(Father):
    def study_python<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值