python的点号运算和LEGB规则的学习理解

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 内置作用域
这样一层层查找,找到就停止搜索,如果没找到,就未定义的错误.
发布了44 篇原创文章 · 获赞 3 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qiya2007/article/details/25907645