1. property
摘抄自https://blog.csdn.net/qq_41359051/article/details/82939655
- 定义类的函数时,在函数上方加
@property
class Stranger(object):
def __init__(self, gender=None, age=None, job=None):
self.gender = gender
self._age = age
self.jobb = job
@property
def age(self):
return self._age
@age.setter
def age(self, value):
if isinstance(value, int):
self._age = value
else:
raise ValueError("'int' type need")
if __name__ == "__main__":
meizi = Stranger()
meizi.age = 18
print("年龄:{age}".format(age=meizi.age))
注意事项
- 属性名与方法名一定要区分开,不然会进入死循环(self._age,def age())
- 实例化的对象使用属性时,不是调用属性(meizi._age),而是用的方法名(meizi.age)
- @property其实就是实现了getter功能; @xxx.setter实现的是setter功能;还有一个 @xxx.deleter实现删除功能
- 定义方法的时候 @property必须在 @xxx.setter之前,且二者修饰的方法名相同(age())
- 如果只实现了 @property(而没有实现@xxx.setter),那么该属性为 只读属性
2. python装饰器 – 修饰函数
python装饰器 使用from functools import wraps ,让func.__name__ 变成调用的func 的名称而不是装饰函数的名称
from functools import wraps
def a_new_decorator(a_func):
@wraps(a_func)
def wrapTheFunction():
print("I am doing some boring work before executing a_func()")
a_func()
print("I am doing some boring work after executing a_func()")
return wrapTheFunction
@a_new_decorator
def a_function_requiring_decoration():
"""Hey yo! Decorate me!"""
print("I am the function which needs some decoration to "
"remove my foul smell")
print(a_function_requiring_decoration.__name__)
使用模板
from functools import wraps
def auth(func):
@wraps(func)
def wrapper(*args, **kwargs):
name = input('your name>>: ').strip()
pwd = input('your password>>: ').strip()
if name == 'egon' and pwd == '123':
res = func(*args, **kwargs)
return res
else:
print('账号密码错误')
return wrapper
@auth
def index():
print('from index')
|