实现我们在跑程序的时候告诉我们运行进度
def decorator_process(func):
def wrapper(*args,**kargs):
print("%s已经开始运行"%func.__name__)
return func(*args,**kargs)
return wrapper
@decorator_process
def wj_sum(a,b):
print(a+b)-7
wj_sum(5,6)
装饰器允许我们在调用时提供给它参数
def decorator_user(user):
def decorator(func):
def wrapper(*args,**kargs):
print("%s在使用%s函数"%(user,func.__name__))
return func(*args,**kargs)
return wrapper
return decorator
@decorator_user("wj")
def wj_average(a,b):
print((a+b)/2)
wj_average(2,5)
class decorate_process_cls(object):
def __init__(self,func):
self.func = func
def __call__(self,*args,**kargs):
print("%s函数开始运行"%self.func.__name__)
self.func(*args,**kargs)
print("%s函数运行结束"%self.func.__name__)
@decorate_process_cls
def wj_mean(a,b):
print((a+b)/2)
wj_mean(2,5)
from functools import wraps
import datetime
class decorator_process_cls2(object):
def __init__(self,func):
self.func = func
def __call__(self,*args,**kargs):
"""
这是一个装饰器
"""
print(datetime.datetime.now(),"%s程序开始运行"%self.func.__name__)
self.func(*args,**kargs)
print(datetime.datetime.now(),"%s程序结束运行"%self.func.__name__)
@decorator_process_cls2
def wj_multiply(a,b):
"""
这是原函数
"""
print(a*b)
print(dir(wj_multiply))
class decorator_process_cls2(object):
def __init__(self,func):
self.func = func
@wraps
def __call__(self,*args,**kargs):
"""
这是一个装饰器
"""
print(datetime.datetime.now(),"%s程序开始运行"%self.func.__name__)
self.func(*args,**kargs)
print(datetime.datetime.now(),"%s程序结束运行"%self.func.__name__)
@decorator_process_cls2
def wj_multiply(a,b):
"""
这是原函数
"""
print(a*b)
print(dir(wj_multiply))
class wj_1(object):
name = "张三"
age = 18
@classmethod
def infor(class_object):
print(class_object.name,"的年龄是",class_object.age,"岁",sep = "")
wj_1.infor()
class wj_2(object):
def __init__(self):
self.name_ = "李四"
self.age_ = 25
name = "张三"
age = 18
@staticmethod
def update_name():
wj_2.name = "王二"
print(wj_2.name)
wj_2.update_name()
print(wj_2.name)
class wj_ensemble(object):
sign = "a处"
def __init__(self):
self.sign = "b处"
@classmethod
def func_class(class_obj):
print(class_obj.sign)
@staticmethod
def func_static():
print(wj_ensemble.sign)
def func_usual(self):
print(self.sign)
# 实例运行普通类函数
wj_ensemble().func_usual()
# 类运行普通类函数
try:
wj_ensemble.func_usual
except Exception as error:
print("类不能调用普通函数")
# 类调用@classmethod装饰的方法
wj_ensemble.func_class()
# 实例不能调用@classmethod装饰的方法
wj_ensemble().func_class()
# 静态函数都可以调用
wj_ensemble.func_static()
wj_ensemble().func_static()
使用此装饰器以后,实例可以把方法当属性来调用,也就是无法对属性赋值使用,@property最主要的目的是使得对私有属性无法修改
class wj_3(object):
def __init__(self):
self.__name__ = "玫瑰少年"
@property
def name(self):
return self.__name__
wj_3().name