zoukankan      html  css  js  c++  java
  • Python之面向对象(三)继承详解以及面向对象三大特性

    面向对象之:继承

    1. 面向对象的继承简介:继承(英语:inheritance)是面向对象软件技术当中的一个概念。如果一个类别A“继承自”另一个类别B,就把这个A称为“B的子类别”,而把B称为“A的父类别”也可以称“B是A的超类”。继承可以使得子类别具有父类别的各种属性和方法,而不需要再次编写相同的代码。在令子类别继承父类别的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类别的原有属性和方法,使其获得与父类别不同的功能。另外,为子类别追加新的属性和方法也是常见的做法。 一般静态的面向对象编程语言,继承属于静态的,意即在子类别的行为在编译期就已经决定,无法在执行期扩充。

    2. 继承例子:

      • class Person
        	def __init__(self,name,sex,age):
                self.name=name
                self.sex=sex
                self.age=age
        class Cat:
            def __init__(self,name,sex,age):
                self.name=name
                self.sex=sex
                self.age=age
        class Dog:
            def __init__(self,name,sex,age):
                self.name=name
                self.age=age
                self.sex=sex
        #继承的用法
        class Aniaml(object):
            def __init__(self,name,sex,age):
                self.name=name
                self.age=age
                self.sex=sex
        class Person(Aniaml):
            pass
        
        class Cat(Aniaml):
            pass
        
        class Dog(Aniaml):
            pass
        
      • 继承:增加了类的耦合性,减少了重复代码,使得代码更加规范化,合理化

    3. 继承的分类

      • 就上面的例子:Aminal叫做父类,基类,超类;Person Cat Dog:子类,派生类
      • 补充:python2x版本中存在两种类:
        • 经典类,在python2.2之前使用的经典类。经典类是不继承object类;
        • 新式类:在python2.2之后出现了新式类,新式类的特点是继承object类
        • python3中使用的都是新式类。如果不继承任何父类,就默认继承object类

    6.5 面向对象的三大特性

    1. python面向对象的三大特性:继承、封装、多态

    2. 封装简介:把很多数据封装到⼀个对象中. 把固定功能的代码封装到⼀个代码块, 函数, 对象, 打包成模块. 这都属于封装的思想.

      • 封装:顾名思义就是将内容封装到某个地方,然后再去调用被疯转在某物的内容,所以,在使用面向对象的封装特性时,需要:将内容封装到某处,从某处调用被封装的内容

      • 例子:

        • class foo:
              def __init(self,name,sex):
                  self.name=name
                  self.sex=sex
          obj=foo("wupeiqi","男")
          #self是一个形式参数,当执行obj=foo("wupeiqi","男")时,self等于obj,所以内容被封装到obj里,每个对象都有name和sex属性
          #调用 通过self间接调用 通过对象调用
          
    3. 继承简介:⼦类可以⾃动拥有⽗类中除了私有属性外的其他所有内容. 说⽩了, ⼉⼦可以随便⽤爹的东⻄.

    4. 多态简介:同⼀个对象, 多种形态. 这个在python中其实是很不容易说明⽩的

      • 多态:同一个度地下,多种形态。python默认支持多态

      • 例子:

      • #在java或者c#定义变量或者给函数传值时必须定义数据类型,否则就报错
        def func(int a)
        	print('a必须是数字')
        #而类似于python这种弱类型定义语言,a可以是任意形态(str,int,object等等)
        def func(a):
            print('a是什么都可以')
        
    5. 鸭子类型:python中有一句谚语说得好,你看起来像鸭子,那么你就是鸭子

      • 例子:

      • class A:
            def f1(self):
                print('in A f1')
            
            def f2(self):
                print('in A f2')
        
        
        class B:
            def f1(self):
                print('in A f1')
            
            def f2(self):
                print('in A f2')
                
        obj = A()
        obj.f1()
        obj.f2()
        
        obj2 = B()
        obj2.f1()
        obj2.f2()
        # A 和 B两个类完全没有耦合性,但是在某种意义上他们却统一了一个标准。
        # 对相同的功能设定了相同的名字,这样方便开发,这两个方法就可以互成为鸭子类型。
        
        # 这样的例子比比皆是:str  tuple list 都有 index方法,这就是统一了规范。
        # str bytes 等等 这就是互称为鸭子类型。
        
  • 相关阅读:
    POJ 3084 Panic Room
    HDU 4111 Alice and Bob
    POJ 2125 Destroying The Graph
    HDU 1517 A Multiplication Game
    Codeforces 258B Little Elephant and Elections
    HDU 2448 Mining Station on the Sea
    ACM MST 畅通工程再续
    ACM DS 畅通工程
    ACM DS 还是畅通工程
    ACM DS Constructing Roads
  • 原文地址:https://www.cnblogs.com/zhangdadayou/p/11415352.html
Copyright © 2011-2022 走看看