python的点号运算和LEGB规则的学

发布时间:2019-08-17 09:07:41编辑:auto阅读(2055)

    python是一门完全支持面向对象风格的语言.那么我就从面向对象的三要素讲起:

    1 封装

    2 继承

    3 多态

    python在这三个方面都有着自己的特色.

    1 python的封装是约定 ,而不是约束, 因为你已经是成年人了.

    2 python的继承 实现本质是点号运算

    3 python的多态是基于协议,基于行为的多态

    下面我们讲讲python的变量查找规则

    1 简单的变量--遵循LEGB查找规则
    2 点号运算 x.y 搜索对象中的属性y, 这个具有通用性, 可以用于任何对象.

    python的继承基于属性查找?对的,这种规则即统一,又简单,非常有特色.

    假如我们有一个基类X ,然后Y继承与X, x是Y的实例,这里就形成了一个非常简单的继承树.也就是我们的搜索树.
    X--->Y--->x
    由于python中的类也是对象,所以我们的这颗树的成员本质都是一样的--对象.
    这颗树上的每一个对象都有自己的命名空间.一般这个命名空间技术上用一个可维护的字典来实现. 在这个继承树上我们查找一个属性x.name.那么就会按照广度遍历的方法,搜索这颗树,找到name属性为止,没找到就抛出异常. 这就是python的继承.

    LEGB是针对于简单变量的变量搜索规则.

    1 在本地查找
    2 嵌套作用域
    3 全局作用域
    4 内置作用域
    这样一层层查找,找到就停止搜索,如果没找到,就未定义的错误.

关键字