python
Copyright 2021, 月下麒麟
此篇僅作紀錄用~
reference:[Python教學] Class / Static /Abstract Method 初探
因該原作寫得相當清楚,而做為自我練習並引用其程式當範例
定義屬性的三個方法
class ThisTestClass:
getName = 'Max' #方法一:把屬性定義寫在init外面
def __init__(self):
self.getNameFromInit = ‘Max__init__’ #方法二:把屬性定義寫在init內
pass
if __name__ == “__main__”:
task = ThisTestClass()
task.sendName = ‘Max_sendName’ ##方法三:自己給屬性與參數
print(task.getName)
print(task.getNameFromInit)
print(task.sendName)
>>> Max
>>> Max__init__
>>> Max_sendName
Staticmethod
class People_StaticMethods:
def __init__(self):
pass
def sleep(self, sleep_hour):
print('Sleeping hours :', sleep_hour)
@staticmethod
def work(work_hour):
print('Working hours :', work_hour)
m = People_StaticMethods()
m.sleep(3)
People_StaticMethods.work(4)
# >>> Sleeping hours : 3
# >>> Working hours : 4
classmethod
class People_ClassMethods:
def __init__(self):
pass
def sleep(self, sleep_hour):
print('Sleeping hours :', sleep_hour)
@classmethod
def work(cls, work_hour):
print('Working hours :', work_hour)
cls().sleep(6)
People_ClassMethods.work(5)
AbstractMethod
import abc
class Employee(abc.ABC):
@abc.abstractmethod
def work(self):
return NotImplemented
class Andy(Employee):
def work(self):
print('work')
class Max(Employee):
def sleep(self):
print('sleep')
Andy().work()
# >>> work
Max().sleep()
# >>> Traceback (most recent call last):
# File "/Users/max/Desktop/python_learning/methods.py", line 77, in <module>
Max().sleep()
TypeError: Can't instantiate abstractclass Max with abstract methods work
from functools import wraps
import time
def timer(func):
@wraps(func)
def wrap():
t_start = time.time()
print("1")
func()
print("8")
t_end = time.time()
t_count = t_end - t_start
print("[花費時間]", t_count)
return wrap
def func_print_one(func):
@wraps(func)
def wrap():
print('2')
func()
print("7")
return wrap
def func_print_two(func):
@wraps(func)
def wrap():
print('3')
func()
print("6")
return wrap
@timer
@func_print_one
@func_print_two
def dosomething():
print("4")
print('do some thing')
print("5")
dosomething()
# -----
# >>> 1
# >>> 2
# >>> 3
# >>> 4
# >>> do some thing
# >>> 5
# >>> 6
# >>> 7
# >>> 8
# >>> [花費時間] 0.049613237380981445
我的理解是,裝飾器由上而下
先去裝飾器裡面
再到使用裝飾器的函式
最後,再回到裝飾器執行完畢
遇到兩層或以上
一樣由上而下