zoukankan      html  css  js  c++  java
  • 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()方法的对象。这就是动态语言的“鸭子类型”,它并不要求严格的继承体系,一个对象只要“看起来像鸭子,走起路来像鸭子”,那它就可以被看做是鸭子。动态语言的鸭子类型特点决定了继承不像静态语言那样是必须的。

  • 相关阅读:
    记账本第二天
    记账本第一天
    HDU 1811
    Codeforces Round #246 (Div. 2) D. Prefixes and Suffixes
    KMP超强模板贴一份
    2014辽宁省赛总结
    Codeforces Round #244 (Div. 2)
    CodeForces 383D Antimatter
    NEU 1351 Goagain and xiaodao's romantic story I
    UVA 10692 Huge Mod
  • 原文地址:https://www.cnblogs.com/zhlz/p/9535453.html
Copyright © 2011-2022 走看看