zoukankan      html  css  js  c++  java
  • python学习笔记四 (运算符重载和命名空间、类)

     从以上代码中应该了解到:

    obj.attribute  查找的顺序: 从对象,类组成的树中,从下到上,从左到右到查找最近到attribute属性值,因为rec中存在name的属性,所以x.name可以去到值。

    但通过__dict__就取不到值,因为__dict__属性是基于类对象的命名空间字典。

    命名空间:

    局部命名空间,全局命名空间,内建命名空间

    locals() 为局部命名空间, globals()全局命名空间

    # 类的扩展

    一种好的扩展方式,一种坏的扩展方式,自行体会

     除了类的继承外,还有一种委托模式

    这里应用到了 __getattr__方法, 同时还存在一个__getattribute__方法

    当x.y 时,如果y不存在,则会调用__getattr__方法, 如果同时实现了__getattr__, __getattribute__方法,则只会走getattribuet方法

    如果只定义了__getattribute__方法,x.y不管y存在不存在都会走__getattribute__方法

    截图中,其实__repr__方法还是需要重新定义的,因为__getattr__方法对于内置属性是不起作用的,所以当我注释掉之后,打印mange的时候不是调用Person的__repr__,而是打印了默认的__repr__方法

    这里突然插入一个新的点, 新式类与经典类的区别:

    1、新式类继承自object, 经典类不继承任何类

    2、新式类使用super(子类,self).__init__ 完成构造函数继承, 经典类是使用 父类.__init__完成构造函数继承

    3、新式类:广度优先的查询 ; 经典类:python2.* 是深度优先的查询, python3.*是广度优先的查询,深度优先的查找方式已经是被废弃了

  • 相关阅读:
    关于读取Unity 配置的方案
    有关于Node.js 的最简单的概念
    小小的储备知识:有关于读取section 节点的数据
    Discuz!NT 慢慢分析之开篇Config 的实现
    Additional notes in PHP source code auditing
    Zabbix 基于WEB企业级的系统与网络信息监视系统
    Web漏洞检查工具 Wapiti
    Safe3 网站DDOS防火墙
    Web杀毒v1.0
    免费开源安全网关Untangle
  • 原文地址:https://www.cnblogs.com/yingchen/p/11847556.html
Copyright © 2011-2022 走看看