'''
裝飾器本身就是乙個函式,主要用於為函式新增額外功能。如插入日誌、
效能測試等。
'''from functools import wraps
def log(flag):
def decorate(func):
@wraps(func)
def _wrap(*args,**kwargs):
try:
if flag:
func(*args,**kwargs)
print('name',func.__name__)
except exception as e:
print(e.args)
return _wrap
return decorate
@log(true) //true執行add函式,false不執行add函式
def add(a,b,c):
print('sum','=',a + b + c)
add(1,2,3)
'''
通過isinstance函式可以判斷呼叫的是函式還是方法,如果是函式,型別是
functiontype,如果是方法,型別是methodtype。
'''class myclass:
def process(self):
pass
def process():
pass
print(type(myclass().process).__name__ == 'method') //true
print(type(process).__name__ == 'function') //true
from types import methodtype,functiontype
print('myclass.process:',isinstance(myclass().process,functiontype)) //false
print('myclass.process:',isinstance(myclass().process,methodtype)) //true
print('process:',isinstance(process,functiontype)) //true
print('process:',isinstance(process,methodtype)) //false
'''
共同點:
用來宣告靜態方法的:類名.方法名
區別:1. @staticmethod不需要表示自身物件的self和自身類的cls引數,就像普通函式一樣定義
2. @classmethod也不需要self引數,需要1個引數表示自身的cls引數。避免硬編碼。
'''class myclass:
bar = 1 #靜態變數
def __init__(self):
self.count = 20
def process(self):
print('process:',self.count)
@staticmethod
def static_process():
print('static_process')
print(myclass.bar)
@classmethod
def class_process(cls):
print('class_process')
print(cls.bar)
print(cls) #cls().process()
print(cls().count)
print(myclass.bar) #1
myclass.static_process()
myclass.class_process()
myclass.bar = 123
myclass.static_process()
'''
metaclass:元類,類似於建立類的模板,所有的類都是通過他來建立的,可以自由控制類的建立過程
單例模式
'''class singleton(type):
def __init__(self,*args,**kwargs):
print('in __init__')
self.__instance = none
super(singleton,self).__init__(*args,**kwargs)
def __call__(self,*args,**kwargs):
print('in __call__')
if self.__instance is none:
self.__instance = super(singleton,self).__call__(*args,**kwargs)
print(type(self.__instance))
return self.__instance
class myclass(metaclass=singleton):
pass
my1 = myclass()
my2 = myclass()
print(my1 is my2) #true,相同例項
python總結–基礎知識-12 python基礎知識總結
1 算術運算子 運算子描述例項 加10 20 30 減 10 20 10 乘 10 20 200 除 10 20 0.5 取整除 返回除法的整數部分 商 9 2 輸出結果 4 取餘數 返回除法的餘數 9 2 1 冪 又稱次方 乘方,2 3 8 2 算術運算子 運算子描述 冪 最高優先順序 乘 除 取...
Python基礎知識總結
函式可變引數 可變引數允許你傳入0個或任意個引數,這些可變引數在函式呼叫時自動組裝為乙個tuple。defcalc number sum 0 for x in number sum sum x x return sum 直接呼叫 print calc 5,5,5 列表引數呼叫 num表示把num這個...
Python基礎知識總結
dir builtins 可以檢視內建函式,共68個 標準資料型別 python3 中有六個標準的資料型別,其中 資料型別 數字num 注意 1 python可以同時為多個變數賦值,如a,b 1,2。2 乙個變數可以通過賦值指向不同型別的物件。3 數值的除法包含兩個運算子 返回乙個浮點數,返回乙個整...