Python 03

继承和多态

刚才我们提到了,可以在已有类的基础上创建新类,这其中的一种做法就是让一个类从另一个类那里将属性和方法直接继承下来,从而减少重复代码的编写。提供继承信息的我们称之为父类,也叫超类或基类;得到继承信息的我们称之为子类,也叫派生类或衍生类。子类除了继承父类提供的属性和方法,还可以定义自己特有的属性和方法,所以子类比父类拥有的更多的能力,在实际开发中,我们经常会用子类对象去替换掉一个父类对象,这是面向对象编程中一个常见的行为,对应的原则称之为里氏替换原则。下面我们先看一个继承的例子。


                class  Person(object):
                                """人"""
                                      def   __init__(self,name,age):
                                               self._name = name
                                                self.age = age              
                          @property
                           def   name(self):
                                 return self._name

                         @property
                                def   age(self):
                            return self._age

                         @age.setter
                        def   grade(self, grade):
                                  self._grade = grade

                        def study(self, course):
                          print('%s的%s正在学习%s.' % (self._grade, self._name, course))
                    class Teacher(Person)
                    def __init__(self, name, age, title):
                        super().__init__(name, age)
                            self._title = title

                            @property
                            def title(self):
                                return self._title

                            @title.setter
                            def title(self, title):
                                self._title = title

                            def teach(self, course):
                            print('%s%s正在讲%s.' % (self._name, self._title, course))
                            def main():
                            stu = Student('王大锤', 15, '初三')
                            stu.study('数学')
                            stu.watch_av()
                            t = Teacher('骆昊', 38, '老叫兽')
                            t.teach('Python程序设计')
                            t.watch_av()
                            if __name__ == '__main__':
                            main()
                        子类在继承了父类的方法后,可以对父类已有的方法给出新的实现版本,这个动作称之为方法重写(override)。通过方法重写我们可以让父类的同一个行为在子类中拥有不同的实现版本,当我们调用这个经过子类重写的方法时,不同的子类对象会表现出不同的行为,这个就是多态(poly-morphism)。

     列表生成式
     a = [x for x in range(100000000000) if   x %  2==0]
     优点:计算速度快,因为一次性已经加载到内存中了,适合数据量不太大的情况
     缺点:占用内存
     生成器
     a = (x   for    x     in    range(10000000000)    if   x  %  2 ==0)
     优点:节约内存空间
     缺点:计算速度慢,因为要生成

     继承代码:
           class    A(object):
                    def  __init__(self):
                        self.a = 100                            
                             def A1(self):
                                 print("A1)                                          
                    在类名中写上继承的类                          
            class   B(A):
                     def   init(self):
                              A.init(self)
                                self.b = 200
                                def  B1(self);
                             print(‘B1')

                装饰器代码
                def deco(func):
                   def warp(a,b):
                   print(a+b)
                   return func(a,b)
             return warp
                                                @deco
                            def qa(a,b):
                                print("a,b")
                    qa(100,20)

     装饰器参数代码
        #装饰器将前面两个数字的求和,函数本身第三个数乘上这个和。
                     def qa(func): 
                        def warp(num1,num2,num3):
                        num = num1 + num2 
                        return func(0,num,num3)
                        return warp

                        @qa
                        def SUM(num1,num2,num3):
                        print(num1,num2,num3)
                        print(num2*num3)

                    SUM(5,8,9)

                 闭包
                                     def foo():
                                            l = []
                                            def bar(i):
                                                l.append(i)
                                                return l
                                        return bar
                f1 = foo()
                res1 = f1(1)
                print(res1)
                res2 = f1(2)
                print(res2)
                输出结果是               
                                 [1]
                                 [1, 2]

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python中接口定义和依赖注入

    首先,我们必须明确的一点是:python里无接口类型,定义接口只是一个人为规定,在编程过程自我约束

    py3study
  • Python基础之(八)类

    当类中变量引用的是可变对象是,类属性和实例属性都能直接修改这个对象,从而影响另一方的值。

    py3study
  • python3--面向对象的三大特性:封装,property,classmethod,staticmethod

    AttributeError: type object 'A' has no attribute '__N'

    py3study
  • Python中接口定义和依赖注入

    首先,我们必须明确的一点是:python里无接口类型,定义接口只是一个人为规定,在编程过程自我约束

    py3study
  • 面向对象编程-类

    面向对象编程OOP (object-oriented programming)是最有效的软件编写方法之一,面向对象是利用“类”和“对象”来创建各种模拟来实现对真...

    用户1679793
  • Python写的Python解释器(七)--完结篇

    在程序运行时,只会创建一次VirtualMachine实例,这是因为只有一个Python解释器。 VirtualMachine存储着call stack,异常状...

    哒呵呵
  • Python 强化训练:第四篇

    谢伟
  • 10-面向对象2

    isinstance()判断的是一个对象是否是该类型本身,或者位于该类型的父继承链上 。

    用户3106371
  • Python 学习笔记之类与实例

    类 (class) 封装一组相关数据,使之成为一个整体,并使用一种方法持续展示和维护。

    Python技术与生活认知的分享
  • JS魔法堂: Native Promise Only源码剖析

    一, 前言                                深入学习Promise的朋友应该都看过<深入理解Promise五部曲>这一系列的文章,...

    ^_^肥仔John

扫码关注云+社区

领取腾讯云代金券