python类特殊方法
__init__ 和 __new__
init方法不是类的构造方法,其作用是返回实例,new方法才是类的构造方法,通过继承object类重写改方法
__enter__ 和 __exit__
enter作用是初始化后返回实例,exit作用是退出with语句后做处理,例如清理内存,关闭文件,删除冗余等
__str__ 和 __repr__
str方法是用于将实例的信息以字符串的形式输出,repr方法与str作用相同,不同在于repr方法用于交互式环境调试
__setattr__ 、__getattr__、__getattribute__ 、__delattr__
setattr用于设置属性,getattr用于获取不存在的属性,getattribute用于访问存在的属性,delattr用于删除属性
迭代器和生成器
- 迭代器:可迭代对象皆为迭代器,用户自定义对象通过实现iter方法和next方法实现迭代器。
- 生成器:特殊的迭代器,更节省内存(call for need)
*args和**kwargs
- *args:表示多个无名参数,返回其组成的tuple
- **kwargs:表示key=value关键字型参数,返回一个dict
装饰器
普通装饰器:
1
2
3
4
5def my_decoration(func): # 装饰器
def wrapper(*args, **kwargs):
print("{} is running.".format(func__name__))
return func(*args, **kwargs) # 返回被包装函数
return wrapper # 返回包装函数带参数的装饰器:
1
2
3
4
5
6
7
8def use_param(level): # 带参数的装饰器
def my_decoration(func): # 内部装饰器
def wrapper(*args, **kwargs):
print("{} is running.".format(func.__name__))
print("this level is {}".format(level))
return func(*args, **kwargs) # 返回被包装函数
return wrapper # 返回包装函数
return my_decoration # 返回装饰器类装饰器:
1
2
3
4
5
6
7class Foo: # 类装饰器
def __init__(self, func):
self._func = func
def __call__(self):
print("this is class decorator.")
self._func()
print("ending...")functools.wraps:
1
2
3
4
5
6
7from functools import wraps
def my_decoration(func):
def wrapper(*args, **kwargs):
...
return func(*args, **kwargs)
return wrapper装饰器的执行顺序:
1
2
3
4
5
def func():
...等价于
func = d1(d2(d3(func)))
内部装饰器
- @staticmethod: 将类中函数修饰为静态方法不需要额外的参数(self等),不能访问类中的参数
- @classmethod: 函数必须包含一个类参数cls,返回一个实例,可访问类中的成员
- @property: 将函数作为类的属性,进而使函数拥有setter方法和deletter方法,其本身是getter方法
协程、多线程、多进程
- async
- threading
- multiprocessing