- 本复习笔记基本来自于网上复制
- 本复习笔记主要用途在于整理后放在手机上听
- 本复习资料主要给博主用
- 博主觉得不重要的、比如python基础语法什么的 、就不会给出了,系统学习请gayhub搜索。
Python
Python中的元类(metaclass)
- 拦截类的创建
- 修改类
- 返回修改之后的类
类变量和实例变量
class Person:
name="aaa"
p1=Person()
p2=Person()
p1.name="bbb"
print(p1.name) # bbb
print(p2.name) # aaa
print(Person.name) # aaa
Python自省
简单一句就是运行时能够获得对象的类型.比如type(),dir(),getattr(),hasattr(),isinstance().
Python中单下划线和双下划线
foo:一种约定,Python内部的名字,用来区别其他用户自定义的命名,以防冲突,就是例如__init__(),del(),call()这些特殊方法
_foo:一种约定,用来指定变量私有.程序员用来指定私有变量的一种方式.不能用from module import * 导入,其他方面和公有一样访问;
__foo:这个有真正的意义:解析器用_classname__foo来代替这个名字,以区别 和其他类相同的命名,它无法直接像公有成员一样随便访问,通过对象名._类名__xxx这样的方式可以访问.
迭代器和生成器
问: 将列表生成式中[]改成() 之后数据结构是否改变?
答案:是,从列表变为生成器
迭代器:迭代器是一个可以记住遍历的位置的对象:next(iter([1,2,3,4]))
class MyNumbers:
def __iter__(self):
self.a = 1
return self
def __next__(self):
x = self.a
self.a += 1
if self.a> 3:
raise StopIteration
return x
myclass = MyNumbers()
myiter = iter(myclass)
print(next(myiter))
print(next(myiter))
生成器 :使用了 yield
的函数被称为生成器(generator
),简单点理解生成器就是一个迭代器。
面向切面编程(AOP)和装饰器
被用于有切面需求的场景:插入日志、性能测试、事务处理等。
装饰器的作用就是为已经存在的对象添加额外的功能。
Python中重载
函数重载主要是为了解决两个问题。
可变参数类型。
可变参数个数。
Python 都不需要
新式类和旧式类
python的多父类继承问题
新式类继承是根据C3算法,旧式类是深度优先。
在Python3.6下,className.mro()查看继承顺序。
slots
__slots__是一个类变量,__slots__属性可以赋值一个包含类属性名的字符串元组, 或者是可迭代变量,或者是一个字符串,只要在类定义的时候, 使用__slots__ = a Tuple来定义该属性就可以了。