1. @staticmethod和@classmethod
装饰器,都是调用各自的init()构造函数 (分别返回的是staticmethod类对象和classmethod类对象)
- 静态方法:无默认参数,通过 类.静态方法()调用 (适用于声明的类中, 既不需要对象属性,也不需要类相关操作的函数)
- 类方法:默认参数cls, 通过 类.类方法()调用 (适用于声明的类中, 不需要对象属性,但需要类相关操作的函数)
注:如果需要把装饰器用在一个静态方法或者类方法时,正确写法:
2. 什么是装饰器,用法和应用场景,写一个decorator
- 装饰器本质上是一个Python函数,主要功能是为已经存在的函数或对象添加额外的功能。它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。
- 用法:@装饰器函数名
- 应用场景: 它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。
def function_name(func):
# 简单装饰器
def wrapper(*args, **kwargs): #带装饰功能的函数
# 添加代码 -- 执行被装饰的函数func前,需要做的事情
return func(*args, **kwargs)
# 添加代码 -- 执行被装饰的函数func后,需要做的事情
return wrapper
3. With statement的好处是什么?如何实现?
with语句的作用是通过某种方式简化异常处理,它是所谓的上下文管理器的一种,举例
with open('output.txt', 'w') as f:
f.write('Hi there!')
当你要成对执行两个相关的操作的时候,这样就很方便,以上便是经典例子,with语句会在嵌套的代码执行之后,自动关闭文件。这种做法的还有另一个优势就是,无论嵌套的代码是以何种方式结束的,它都关闭文件。如果在嵌套的代码中发生异常,它能够在外部exception handler catch异常前关闭文件。如果嵌套代码有return/continue/break语句,它同样能够关闭文件。