您當前的位置:首頁 > 收藏

實現一個Porperty裝飾器,可以把方法裝飾成同一個屬性名

作者:由 python-小智 發表于 收藏時間:2020-03-05

今天簡單的實現下Porperty裝飾器

demo:

class Porperty:

def __init__(self, fget= None, fset= None, fdel = None):

self。fget= fget

self。fset = fset

self。fdel = fdel

def __get__(self, instance, cls):

if instance is None:

return self

if not callable(self。fget):

raise AttributeError

return self。fget(instance)

def __set__(self, instance, value):

if not callable(self。fset):

raise AttributeError

return self。fset(instance, value)

def __delete__(self, instance):

if not callable(self。fdel):

raise AttributeError

return self。fdel(instance)

def setter(self, fset):

self。fset = fset

return self。fset

def deleter(self, fdel):

self。fdel = fdel

return self。fdel

class A:

def __init__(self,x):

self。_x = x

@Porperty

def x(self):

return self。_x

a =A(4)

a。x

a。x = 123

class A:

def __init__(self,x):

self。_x = x

@Porperty

def x(self):

return self。_x

@x。setter

def set_x(self, value):

self。_x = value

a = A(5)

a。x

a。x = 7

標簽: self  __  instance  def  fset