• 第7.5章:类——Cookbook笔记


    obj==eval(repr(obj))

    __slots__定长数组,代替__dict__

    _内部实现

    __名称重整

    _clsname__private/method

    不能通过继承覆写

    子类包含父类属性的引用?默认可读写?隐式创建父类对象?从模板中导入类:类对象隐式实例化?

    __对子类隐藏:继承间的可见性控制

    对类访问:静态方法,类变量

    访问控制:作用域——可见性;存取器——控制访问方式(增,删,改,查)

    将属性定义为property特性

    init

    self.name=name  #调用setter方法

      key  value:对象(方法)

    @property  getter  !getter必要

    def name(self)

      return self._name  实例变量的属性

    @name.setter

    if not isinstance(val,type)

      raise TypeError("")

     增加类型检查

    @name.deleter

    property:一组重载的实例方法

    触发调用clsname.name.fset/fget/fdel

    能否直接修改a._name?

    方法与实际属性不可重名

    将已有的存取器打包,定义为property:name=property(get_name,set_name,del_name)

    可以用来定义计算的属性,不会实际保存,在每次访问时计算

    因为返回结果是表达式,所以无法保存?存取器使用了闭包?

    使用实例属性的接口统一,不需调用运算符()

    两种property的实现原理一致么?一致,所以不用setter?

    存取器是否实际保存?

    如果property出现大量重复代码:替换方案:描述符,闭包

    super()

    搜索(方法解析顺序),调用父类的方法

    可以同名不覆写么(可见属性)?

    mix类  super()在没有显式列出基类时也能工作

    覆盖特殊方法时调用父类?!

    在子类中扩展属性

    覆写属性方法(存取器)

    全部覆写:也可用于描述符

    只定义一个,其他的自动拷贝

    @F.name.getter

    def name(self)

      super(Subclass,Subclass).name.__get__

      控制流传递到父类

      以类变量访问

    super()的参数?

    创建新形势的类属性,实例属性

    描述符类实例,定义类属性、实例属性。

    委托类型检查等工作

    描述符 实现属性访问操作:截获描述符对象的访问__get__,__set__,__del__

    def __get__(self,instance,cls)

    instance.__dict__[self.name]

    依赖字典?

    只能包装一个?

    只能在类的层次定义,不能直接根据实例产生(以类变量为中介)

    描述符实现了

    @classmethod

    @staticmethod

    property

    __slots__

    !!!

    get方法:条件判断实现重载

    以类对象访问描述符实例(实例未填入)返回可调用对象  instance=class

    以类实例对象访问(实例已填入)返回调用结果      instance=None

    instance是什么??

    属性惰性求值

    描述符get实现缓存

    描述符只定义get

    绑定关系弱化的多

    只有当被访问属性不在底层的实例字典,调用__get__方法

    示例中,描述符类 让__get__方法 保存计算结果,其名字与property属性名相同

    进而将值保存在实例字典中

    计算出的值在创建之后变成可变

    可以用对象(示例) 覆写property属性(特性,方法)?

    属性名引用可调用对象——引用其他对象

    保持不可变:

    别名

    @property

    hasattr

    getattr

    setattr

    get操作由属性的getter函数处理(getattr调用getter??)

    比实例字典中查找慢

    简化数据结构的初始化

    抽象基类__init__

    逐个传参(位置参数)

    关键字参数,遍历域中属性名,在传入字典中查找

    字典行为:未搜索到项?

    setattr()设定实例的属性值,通用

    而非直接访问实例字典:不安全:假定了实例实现了dict。slots,property,描述符实现

    定义类作为接口,或抽象基类

    执行类型检查,确保接口被实现

    核心特征:不能被被实例化,强制规定所需编程接口@abstractmethod

    其他类向抽象基类注册,并实现其接口

    collections容器与迭代器

    numbers数值对象

    不应该过度使用抽象基类实行类型约束,Python的核心是动态语言

  • 相关阅读:
    《大话数据结构》第9章 排序 9.9 快速排序(下)
    [HTML5 DOM] dispatchEvent
    [AWS SAP] Exam Tips 2 Continues Improvement for Existing Solutions
    遇见C++ PPL:C++ 的并行和异步
    遇见C++ AMP:在GPU上做并行计算
    遇见C++ Lambda
    遇见C++ AMP:GPU的线程模型和内存模型
    服务器推技术
    转http状态码
    extjs同步与异步请求互换
  • 原文地址:https://www.cnblogs.com/qmcj/p/9205500.html
Copyright © 2020-2023  润新知