1、Python 中的类(上)
1.1 数据属性
-
类数据属性和实例数据属性
-
特殊的类属性
-
属性隐藏
1.2 方法
-
实例方法
-
类方法
-
静态方法
1.3 访问控制
-
单下划线”_”
-
双下划线”__”
1.4 总结:
本文介绍了Python中class的一些基本点:
-
实例数据属性和类数据属性的区别,以及属性隐藏
-
实例方法,类方法和静态方法直接的区别
-
Python中通过”_”和”__”实现的访问控制
Refer:http://python.jobbole.com/82297/
2、Python 中的类(中)
2.1 继承
-
继承中的__init__
-
super
-
MRO
-
__slots__
-
子类没有__slots__属性
-
子类拥有__slots__属性
2.2 总结:
-
本文介绍了Python中的继承,当使用多继承的时候,可以使用super关键字去访问父类中被子类覆盖的方法;对于方法的调用,需要参照MRO。
-
另外介绍了Python类的__slots__属性,通过这个属性可以限制类实例的可用属性。
Refer:http://python.jobbole.com/82308/
3、Python 中的类(下)
3.1 类构造和初始化
-
__new__特性
-
重写__new__
-
__init__的调用
-
派生不可变类型
3.2 定制一个类
-
调用魔术方法
-
python中的魔术方法__ http://python.jobbole.com/85310/
3.3 总结:
-
文中介绍了类的构造和初始化方法:”__new__”和”__init__”。
-
“__new__”方法是新式类特有的方法,通常情况下,__new__方法会创建返回cls(cls指代当前类)的实例,然后调用该类的”__init__”方法作为初始化方法,该方法接收这个实例(即self)作为自己的第一个参数,然后依次传入”__new__”方法中接收的位置参数和命名参数;但是,如果”__new__”没有返回cls(即当前类)的实例,那么当前类的”__init__”方法是不会被调用的。
-
通过”魔术方法”,可以对自定义类进行定制、扩展,使得自定义类变得强大、易用。
Refer:http://python.jobbole.com/82312/
4、Python 中 self 的含义
-
self代表类的实例,而非类
-
self不必非写成self
-
self可以不写吗
-
在继承时,传入的是哪个实例,就是那个传入的实例,而不是指定义了self的类的实例
-
在描述符类中,self指的是描述符类的实例
总结:
-
self在定义时需要定义,但是在调用时会自动传入。
-
self的名字并不是规定死的,但是最好还是按照约定是用self
-
self总是指调用时的类的实例。
Refer:http://python.jobbole.com/81921/
5、Python 描述符
-
描述符协议中定义了“__get__”、“__set__”、”__delete__” 这些特殊方法
Refer:http://python.jobbole.com/81211/
6、Python 元类(metaclass)
-
类也是对象
-
动态地创建类
-
到底什么是元类
-
__metaclass__属性
-
自定义元类
-
为什么要用metaclass类而不是函数?
-
究竟为什么要使用元类?
结语:
-
首先,你知道了类其实是能够创建出类实例的对象。好吧,事实上,类本身也是实例,当然,它们是元类的实例。
>>>class Foo(object): pass
>>> id(Foo)
142630324
-
Python中的一切都是对象,它们要么是类的实例,要么是元类的实例,除了type。type实际上是它自己的元类,在纯Python环境中这可不是你能够做到的,这是通过在实现层面耍一些小手段做到的。其次,元类是很复杂的。对于非常简单的类,你可能不希望通过使用元类来对类做修改。你可以通过其他两种技术来修改类:
1) Monkey patching
2) class decorators
-
当你需要动态修改类时,99%的时间里你最好使用上面这两种技术。当然了,其实在99%的时间里你根本就不需要动态修改类 :D
Refer:http://python.jobbole.com/21351/
7、Python 函数相关
-
可变长度参数(*args 和 **kwargs)
-
非关键字变长参数(元组)
-
关键字变长参数(字典)
-
匿名函数(lambda)
-
几个内建函数:filter(),map(),reduce()
Refer:http://python.jobbole.com/82300/
8、Python 迭代器和生成器
8.1 迭代器
-
__iter__()和next()方法
-
自定义迭代器
-
迭代器和可迭代对象
8.2 生成器
-
生成器执行流程
-
生成器表达式
-
递归生成器
-
生成器的send()和close()方法
8.3 总结
本文介绍了Python迭代器和生成器的相关内容。
-
通过实现迭代器协议对应的__iter__()和next()方法,可以自定义迭代器类型。对于可迭代对象,for语句可以通过iter()方法获取迭代器,并且通过next()方法获得容器的下一个元素。
-
像列表这种序列类型的对象,可迭代对象和迭代器对象是相互独立存在的,在迭代的过程中各个迭代器相互独立;但是,有的可迭代对象本身又是迭代器对象,那么迭代器就没法独立使用。
-
itertools模块提供了一系列迭代器,能够帮助用户轻松地使用排列、组合、笛卡尔积或其他组合结构。
-
生成器是一种特殊的迭代器,内部支持了生成器协议,不需要明确定义__iter__()和next()方法。
-
生成器通过生成器函数产生,生成器函数可以通过常规的def语句来定义,但是不用return返回,而是用yield一次返回一个结果。
9、from … import … 执行机制
http://python.jobbole.com/84174/
Refer:http://python.jobbole.com/82320/