Python的封装、继承和多态

数据封装、继承和多态是面向对象的三大特点。

数据封装:

  在某个类中,比如Student类(初始化有name和score两个属性),每个实例都拥有各自的name,score这些数据。我们可以通过函数来访问这些数据,比如打印一个学生的成绩。直接定义一个输出函数,输出name和对应的score即可。

  但是,既然student实例本身就有这些数据,要访问这些数据,就没有必要从外面的函数去访问,可以直接在Student类的内部定义访问数据的函数,这样,就把“数据”给封装起来了,这些封装数据的函数是和Student类本身是关联起来的,我们称之为类的方法。这样一来,我们从外部看Student类,就只需要知道,创建实例需要给出name和score,而如何打印,都是在Student类的内部定义的,这些数据和逻辑被“封装”起来了,调用很容易,但却不用知道内部实现的细节。有一点,Python和静态语言不同,Python允许对实例变量绑定任何数据,也就是说,对于两个实例变量,虽然它们都是同一个类的不同实例,但拥有的变量名称都可能不同。

继承:

  在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类,而被继承的class称为基类、父类或超类。

  继承最大的好处就是子类获得了父类的全部功能。当然,也可以对子类增加一些方法。当子类和父类存在相同的方法时,我们说,子类方法覆盖了父类的方法,在代码运行的时候,总是会调用子类的方法。由此引出多态。继承可以把父类的所有功能直接拿过来,这样就不必从零做起,子类只需要新增自己特有的方法,也可以把父类不适合的方法覆盖重写。

多态:

  首先,当我们定义一个class的时候,我们实际上就定义了一种数据类型。我们定义的数据类型和Python自带的数据类型,比如str、list、dict没什么两样。因为继承可以一级一级地继承下来,就好比爷爷到爸爸、再到儿子这样的关系。而任何类,最终都可以追溯到根类object。Python的"file-like object"就是一种鸭子类型。对于真正的文件对象,它有一个read()方法,返回其内容。但是,许多对象,只要有read()方法,都被视为"file-like object"。许多函数接收的参数就是"file-like object",你不一定要传入真正的文件对象,完全可以传入任何实现了read()方法的对象。这就是动态语言的“鸭子类型”,它并不要求严格的继承体系,一个对象只要“看起来像鸭子,走起路来像鸭子”,那它就可以被看做是鸭子。动态语言的鸭子类型特点决定了继承不像静态语言那样是必须的。

转载于:https://www.cnblogs.com/zhlz/p/9535453.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值