zoukankan      html  css  js  c++  java
  • python复习概念_oop高

    一、私有化属性
    私有化属性语法:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问

    使用私有属性的场景
    1.把特定的一个属性隐藏起来,不想让类的外部进行直接调用
    2.我想保护这个属性,不想让属性的值随意的改变
    3.保护这个属性,不想让派生类【子类】去继承

    私有化属性小结:
    1.私有化的【实例】属性,不能在外部直接的访问,可以在类的内部随意的使用
    2.子类不能继承父类的私有化属性【只能继承父类公共的属性和行为】
    3.在属性名的前面直接加'__',就可以变为私有化了

    私有化方法特性:一般是类内部调用,子类不能继承,外部不能调用

    二、property
    要想更加简单的得到、修改私有属性,可以使用类似Java的getter和setter方法
    用到property函数,通过装饰器的方式更加简单
    exa:
    class People:
      def __init__(self):
      self.__age = 18 # 定义一个私有化属性,属性名字前加__
    @property # 用装饰器修饰 添加属性标志 提供一个getter方法
    def age(self): # 访问私有实例属性
      return self.__age
    @age.setter # 提供一个setter方法
    def age(self,age): # 修改私有实例属性
      self.__age = age

    三、魔术方法__new__
    __new__方法的作用:创建并返回一个实例对象,如果__new__只调用了一次,
    就会得到一个对象。继承自object的新式类才有new这一魔法方法。

    注意事项:
    1.__new__是在一个对象实例化的时候所调用的第一个方法
    2.__new__至少必须要有一个参数cls,代表要实例化的类,此参数在实例化时由python
    解释器自动提供,其他的参数是用来直接传递给__init__方法
    3.__new__决定是否要使用该__init__方法,因为__new__可以调用其他类的构造方法
    或者直接返回别的实例对象来作为本类的实例,如果__new__没有返回实例对象,
    则__init__不会被调用
    4.在__new__方法中,不能调用自己的__new__方法,即:return cls.__new__(cls),
    否则会报错(RecursionError:maximum recursion depth exceeded:超过最大递归深度)

    对__new__理解:
    # 在新式类中 __new__ 才是真正的实例化方法,为类提供外壳制造出实例框架,然后调用该框架内的构造方法__init__进行丰满操作
    # 比喻建房子 __new__ 方法负责开发地皮 打地基,并将原料存放在工地,而__init__负责从工地取材料建造出地皮开发图纸规定的大楼
    # 负责细节设计、建造,最终完成

    四、单例模式
    单例模式:是一种常用的软件设计模式 目的:确保某一个类只有一个实例存在
    如果希望在某个系统中,某个类只能出现一个实例的时候,那么这个单例对象就满足要求

    五、异常
    语法:
    try:
      可能出现错误的代码块
    except:
      出错之后执行的代码块
    else:
      没有出错的代码块
    finally:
      不管有没有错都执行的代码块

    异常的抛出机制
    如果在运行时发生异常,解释器会查找相应的异常捕获类型
    如果在当前函数里面没有找到的话,它会将异常传递给上层的调用函数,看是否处理
    如果在最外层没有找到的话,解释器就会退出程序,down掉

    六、动态的绑定属性和方法
    动态语言:运行时可以改变其结构的语言。例如新的函数、对象、甚至代码可以被引进,
    已有的函数可以被删除或是其他结构上的变化。如php,JavaScript,python都是动态语言,
    C,C#,java是静态语言。

    动态添加实例方法
    动态添加实例方法需要使用types
    import types # 添加方法的库
    xh.printInfo = types.MethodType(dymicMethod,xh) # 动态的绑定方法
    对象 新的方法名 要添加的方法,对象
    xh.printInfo() # 调用动态绑定的方法

    给类绑定类方法和静态方法
    使用方式:类名.方法名 = xxxx
    #给Student类绑定类方法或静态方法
    Student.classMethod = classMethod
    Student.classMethod()

    七、__slots__方法
    __slots__属性: python是动态语言,在运行的时候可以动态添加属性。
    如果要限制在运行的时候给类添加属性,Python允许在定义class的时候,
    定义一个特殊的__slots__变量,来限制该class实例能添加的属性。

    用法: 只有在__slots__变量中的属性才能被添加,没有在__slots__变量中的属性
    会添加失败。可以防止其他人在调用类的时候胡乱添加属性或方法。
    __slots__属性子类不会继承,只有在当前类中有效

    作用:
    1.限制要添加的实例属性
    2.节约内存空间

    在继承关系当中的使用 __slots__:
    1.子类未声明__slots__时,那么是不会继承父类的__slots__,
    此时子类是可以随意的给属性赋值的
    2.子类声明了__slots__时,继承父类的__slots__,也就是子类__slots__的范围为:
    其自身+父类的__slots__

  • 相关阅读:
    【转】滑动窗口与拥塞控制
    LeetCode 34 :Find First and Last Position of Element in Sorted Array
    主要电商模式介绍
    使用springboot创建邮件服务器
    解决Windows下端口占用问题
    [leetcode]给定二维平面上的n个点,找出位于同一直线上的点的最大数目
    获得超类的泛型参数在子类实例化传入的实际类型
    构造单例的五种方法
    20162308 2017-2018-2 《程序设计与数据结构》第11周学习总结
    20162308 2017-2018-2 《程序设计与数据结构》第十周学习总结
  • 原文地址:https://www.cnblogs.com/LEPENGYANG/p/14273443.html
Copyright © 2011-2022 走看看