@property修饰了类方法后,类实例化后,我们可以像访问实例属性一样访问被修饰的方法(这些方法经过修饰后,其实就变成了一个property对象,property对象中含有被修饰的几种方法)
class C(object):
def __init__(self):
self._x = None
@property
def x(self):
return self._x
@x.setter
def x(self, value):
self._x = value
@x.deleter
def x(self):
del self._x
a = C()
a.x = 9
del a.x
定义实现
class myproperty(object):
def __init__(self, getx=None, setx=None, delx=None, doc=None):
self.getx = getx
self.setx = setx
self.delx = delx
self.__doc__ = doc
def getter(self, getx):
return type(self)(getx, self.setx, slef.delx, self.__doc__)
def setter(self, setx):
return type(self)(self.getx, setx, self.delx, self.__doc__)
def __get__(self, instance, owner):
if self.getx:
return self.getx(instance)
return None
def __set__(self, instance, value):
if self.setx:
return self.setx(instance,value)
版权声明:class myproperty(object)类代码为CSDN博主「潇垚」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010872995/article/details/50389213
class test1(object):
def __init__(self):
self.__name = None
@myproperty
def name(self):
return self.__name
@name.setter
def name(self, value):
if value < 0:
print 'value negative'
return
self.__name = value
t = test1()
print t.name
t.name = -15
t.name = 67
print t.name
t1 = test1()
print t1.name
t1.name = 25
print t1.name
结果:
None # print name
value negative #t.name = -15
67 # print t.name
None # print t1.name
25 # print t1.name