一,,property,
property裝飾器是用來將類內的函式屬性偽裝成資料屬性
class people:
def __init__(self,name,weight,height):
self.name = name
self.weight = weight
self.height = height
@property
def bmi(self):
return self.weight/(self.height**2)
obj = people('egon',80,180)
print(obj.bmi)
# 解釋:bmi在類內定義的是函式,在用的時候已經被property裝飾過的可以當作屬性來用,用之前可以設定幾個條件,不用加括號
class people:
def __init__(self,name):
self.__name=name
@property
def name(self):
return '《名字:%s>' %self.__name
@name.setter
def name(self,obj):
if type(obj) is not str:
print('name必須為str型別')
return
self.__name=obj
@name.deleter
def name(self):
# print('不讓刪')
del self.__name
obj=people('egon')
# 解釋:bmi在類內定義的是函式,如果想在類外面對隱藏的變數進行更改時,如下:
@name.setting
def name(self,obj):
if type(obj) is not str:
print('name必須為str型別')
return
self.__name = obj
# 刪除的時候
@name.deleter
def name(self):
del self.__name
二,(一)繫結方法:繫結給誰就應該由誰來呼叫,誰來呼叫就會將誰當作第乙個引數傳入
# @classmethod :被它裝飾的函式繫結給類
1,繫結給物件的方法:類中定義的函式預設就是繫結給物件的
2,繫結給類的方法:為類中定義的函式加上乙個裝飾器classmethod
(二)非繫結方法:既不與類繫結,又不與物件繫結,意味著物件和類都可以來呼叫,無論誰來呼叫都是乙個普通的函式,沒有自動傳值的效果
@staticmethod:被它裝飾的函式不用被傳值
應用:class mysql:
def __init__(self, ip, port):
self.id = self.create_id()
self.ip = ip
self.port = port
def tell_info(self):
print('' % (self.id, self.ip, self.port))
@classmethod
def from_conf(cls):
return cls(ip, port)
@staticmethod
def create_id():
import uuid
return uuid.uuid4()
# obj1=mysql('1.1.1.1',3306)
# obj1.tell_info()
obj2 = mysql.from_conf()
obj2.tell_info()
python裝飾器三種裝飾模式的簡單分析
學設計模式中有個裝飾模式,用j a實現起來不是很難,但是遠遠沒有python簡單,難怪越來越火了 這裡就簡單討論下python的幾種裝飾模式 一 無參裝飾器 裝飾器 import time 裝飾器,記錄函式執行時間 def decorator01 fun def wapper stime time....
函式裝飾器 類裝飾器
一 函式裝飾函式 defwrapfun func definner a,b print function name func.name r func a,b return r return inner wrapfun defmyadd a,b return a b print myadd 2,3 二...
python裝飾器 函式裝飾器,類裝飾器
只要實現此 模式,這個obj就叫乙個裝飾器 參考 函式裝飾器 例子 def decorator func def inner args,kwargs print before.res func args,kwargs print after.return res return inner decor...