實現一個Porperty裝飾器,可以把方法裝飾成同一個屬性名
今天簡單的實現下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