• 6 Jun 18 复习,面向对象


    6 Jun 18 复习,面向对象

    一、复习

    1. 在现实世界中,先有对象,再有类;在程序中,先定义类,后产生对象
    2. 类有两种属性:数据属性和函数属性
    3. 类的数据属性是所有对象共享的;类的函数属性是绑定给对象用的
    4. 通过继承建立的派生类与基类间是一种是的关系,通过组合是一种有的关系
    5. 抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化
    6. 子类中调用父类的方法:父类名.父类方法(); super(); 二者使用哪一种都可以,但最好不要混合使用 
    7. 封装的真谛在于明确地区分内外
    8. 封装数据:将数据隐藏起来这不是目的。隐藏起来然后对外提供操作该数据的接口,然后我们可以在接口附加上对该数据操作的限制,以此完成对数据属性操作的严格控制。
    9. 封装方法:目的是隔离复杂度
    10. Property

    class People:

        def __init__(self,name,weight,height):

            self.name=name

            self.weight=weight

            self.height=height

        @property

        def bmi(self):

            return self.weight/(self.height**2)

    p1=People('egon',75,1.85)

    print(p1.bmi)

    1. 反射

    hasattr(object,name)

    getattr(object, name, default=None)

    setattr(x, y, v) 

    delattr(x, y)

    1. 反射的好处:事件可插拔机制等

    #from module import FtpClient

    f1=FtpClient('192.168.1.1')

    if hasattr(f1,'get'):

        func_get=getattr(f1,'get')

        func_get()

    else:

        print('---->不存在此方法')

    print('处理其他的逻辑')

    1. __setattr__添加/修改属性时会触发

    __delattr__删除属性时会触发

    __getattr__只有在使用点调用属性且属性不存在的时候才会触发

    __getattribute__在使用点调用属性时,不管属性是否存在都执行

    当__getattribute__与__getattr__同时存在,只会执行__getattrbute__,除非__getattribute__在执行过程中抛出异常AttributeError

    二、面试题

    1. 谈谈你对面向对象的理解?

       扩展方便;上帝视角,造一些对象(对象是特征与技能的结合体),让他们之间发生反应

    2. Python面向对象中的继承有什么特点?

       方便代码重用,可以多继承

    3. 面向对象深度优先和广度优先是什么?

       菱形继承的背景下,查找属性时:

       1、经典类:深度优先

       在python2中,A为经典类,F->D->B->A->E->C

       2、新式类:广度优先

       在python3中,A为新式类,F->D->B->E->C-A->object

    4. 面向对象中super的作用?

       A内super会基于C.mro()继续往后找;子代继承父代的方法

    5. 列举面向对象中特殊成员(带双下划线的特殊方法,如:__new__、__init__、__call__等)

       __new__  # 创建对象

       __init__  # 初始化对象

       __call__  # 调用对象

       __str__   # print打印一个对象时  __unicode__(python2中)

        __repr__  # 输入对象回车找的是__repr__; print先找__str__,没有__str__找__repr__

       __doc__  # 查看文档注释

       __getattr__

       __setattr__

       __del__  # 删除对象

    6. 静态方法和类方法区别?

      @staticmethod 不主动传值,只是一个单纯的函数

      @classmethod 类调用时,将类本身作为第一个参数传入

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

  • 相关阅读:
    css学习总结
    bootstrap的学习总结
    一些组件配置的理解
    php 微信公众号支付(小程序也是这么支付的)
    mysql 链接超过ip限制时的报错
    php生成二维码
    wamp配置虚拟主机 php 5.6.25
    php 渣全的循环
    4、kafka、spark streaming
    gauss消元
  • 原文地址:https://www.cnblogs.com/zhangyaqian/p/py201806060.html
Copyright © 2020-2023  润新知