动态类型
![](https://images2015.cnblogs.com/blog/817474/201510/817474-20151023111501567-1852406116.png)
从概念上将,Python将会执行三个不同步骤去完成这个操作:
- 创建一个对象表示3
- 创建一个变量,如果它还没有被创建
- 将变量与新的对象3连接
实际效果如图所示:
变量总是连接到对象上,并且绝对不会连接到其他变量上,但是更大的对象可能连接到其他的对象。
- 变量是一个系统表的元素,拥有指向对象的连接的空间
- 对象是分配的一块内存,由足够的空间去表示它们所代表的值
- 引用是自动形成从变量到对象的指针
作用域
python 的变量名解析机制成为LEGB原则:
- 当函数中使用未认证变量名时,python会搜索4个区域[本地作用域L,上一层结构的def或lambda的本地作用域,之后是全局作用域G,最后是内置作用域B],并且在在第一处能够找到这个变量名的地方停下来,如果没有找到此变量名就会报错。
- 当函数给一个变量名赋值时,Python总是创建或改变本地作用域的变量名,除非它在函数中已经声明为全局变量global。
- 当在函数外给一个变量赋值时,本地作用域与全局作用域是相同的。
Import如何工作
import 执行的3个步骤:
- 找到模块代码
- 编译成位码(如果需要,比如源文件被修改)
- 执行模块代码来创建其所定义的对象
这三个步骤,只有模块在第一次导入时才会进行。当再次导入时,会跳过以上三个步骤,直接提取内存中已加载的对象。
类与OOP
类vs实例:类是生产实例的工厂
类vs模块:内存中特定模块只能有一个实例,类可以可以有多个实例
类接口技术:
- Super 定义一个method函数以及在子类中期待一个动作的delegate
- Inheritor 没有提供任何变量名,会继承Super定义的一切内容
- Replacer 用自己的版本覆盖Super的method
- Extender 覆盖并回调默认的method,从而定制Super的method
- Provider 实现Super的delegate方法预期的action方法
![](https://images2015.cnblogs.com/blog/817474/201510/817474-20151026173009232-734706858.png)