classHuman(object):"""docstring for Human"""def__init__(self):super(Human, self).__init__()
self.message ='111'defsay(message):ifnot message:
message ='hello'print(f'I say {message}')@classmethoddefspeak(cls, message):ifnot message:
message ='hello'
cls.say(message)
human = Human()
human.speak('hi')
property:把方法变成属性
classHuman(object):"""docstring for Human"""def__init__(self, value):super(Human, self).__init__()
self._age = value
@propertydefage(self):return self._age
human = Human(20)print(human.age)
无参数的装饰器
import datetime
import time
defcalc_spend_time(func):defnew_func(*args,**kargs):
start_time = datetime.datetime.now()
result = func(*args,**kargs)
end_tiem = datetime.datetime.now()print(f"result: {result}, used: {(end_tiem - start_time).microseconds} s")return new_func
@calc_spend_timedefcalc_add(a, b):
time.sleep(10)return a + b
# 实现日志打印defprint_log(func):"""日志装饰器"""definner(*args,**kwargs):print(f"方法{func.__name__}的参数是:{args, kwargs}")return func(*args,**kwargs)return inner
@print_logdeftest_1(a, b):return a + b
print(test_1(4,5))
带参数的装饰器
import datetime
defcalc_spend_time(author):deffirst_deco(func):defnew_func(*args,**kargs):
start_time = datetime.datetime.now()
result = func(*args,**kargs)
end_tiem = datetime.datetime.now()print(f"result: {result}, used: {(end_tiem - start_time).microseconds} s")return new_func
return first_deco
@calc_spend_time('author_1')defcalc_add(a, b):return a + b
@calc_spend_time('author_2')defcalc_diff(a, b):return a - b
calc_add(a=1, b=2)
calc_diff(1,2)