#Class
##namespace and scope
python中的namespace共有三个:
- 函数所有的局部命名空间
- 模块所有的全局命名空间
- 所有模块可以访问的内置命名空间
搜索时从上往下搜索.嵌套函数在1之后还有需要搜索父函数的命名空间
###nolocal和global
global声明的变量会添加到当前模块的全局命名空间(如果变量不存在)
nonlocal会在1和2中进行搜索(不包括3).
##variables
和function一样,变量的默认值会被所有实例化该类的变量共享.还是举个栗子:
会输出[‘roll over’, ‘play dead’]
##Inheritance
没啥好说的,就是注意一点:若A继承B,A初始化时不会调用B的初始化函数
###multiple inheritance
主要是变量名重复的问题.python不会检查变量名是否重复因为它定义了一个搜索顺序:class DerivedClassName(Base1, Base2, Base3, ..., Basen)
按照从左到右的顺序进行搜索,即先搜索Base1及其父类及其父类的父类……直到搜到object,找不到就对Base2重复同样的过程…..直到Basen或者找到.对于重复的类,不会检查.如Base1,Base2都继承了Base,则Base类只会在Base1搜索过程中被检查,不会出现在Base2的搜索过程.
##private variable
所有的variable和function前面加上__就是private的了
Odds and Ends
我实在不知道该怎么评价这种东西╮( ̄▽ ̄”)╭ 上栗子:
然后你就可以访问john的三个属性了………这TM都是什么鬼啊!!!!
##Iterators
对于任何一个类,提供了next和iter方法之后就可以在for中使用了.
###genetor
上面Iterator的实现比较繁琐,需要实现自己对id的控制.因此python引入了yield关键字,函数中使用了yield的一律会生成Iterator.如:
函数可以这样调用:for n in fab(5)