property 的详细使用方法
property(fget=None, fset=None, fdel=None, doc=None)俗话说条条大路通罗马,同样是完成一件事,Python 其实提供了好几个方式供你选择。
property() 是一个比较奇葩的BIF,它的作用把方法当作属性来访问,从而提供更加友好访问方式。
官方帮助文档代码:
class C:
def __init__(self):
self._x = None
def getx(self):
return self._x
def setx(self, value):
self._x = value
def delx(self):
del self._x
x = property(getx, setx, delx, "I'm the 'x' property.")
property() 返回一个可以设置属性的属性,当然如何设置属性还是需要我们人为来写代码。第一个参数是获得属性的方法名(例子中是 getx),第二个参数是设置属性的方法名(例子中是 setx),第三个参数是删除属性的方法名(例子中是 delx)。
property() 有什么作用呢?举个例子,在上边的例题中,我们为用户提供 setx 方法名来设置 _x 属性,提供 getx 方法名来获取属性。但是有一天你心血来潮,突然想对程序进行大改,可能你需要把 setx 和 getx 修改为 set_x 和 get_x,那你不得不修改用户调用的接口,这样子的体验就非常不好。
有了 property() 所有问题就迎刃而解了,因为像上边一样,我们为用户访问 _x 属性只提供了 x 属性。无论我们内部怎么改动,只需要相应的修改 property() 的参数,用户仍然只需要去操作 x 属性即可,对他们来说没有任何影响。
使用属性修饰符创建描述符
使用属性修饰符创建描述符,也可以实现同样的功能(【扩展阅读】Python 函数修饰符(装饰器)的使用):
官方帮助文档代码:
class C:
def __init__(self):
self._x = None
@property
def x(self):
"""I'm the 'x' property."""
return self._x
@x.setter
def x(self, value):
self._x = value
@x.deleter
def x(self):
del self._x
注意:三个处理 _x 属性的方法名要相同(参数不同)。
好好理解理解。。。
感觉不是很好理解。。。。 有点复杂 有鱼币吗 类有点小难 class Parrot:
def __init__(self):
self._voltage = 100000
@property
def voltage(self):
"""Get the current voltage."""
return self._voltage
turns the voltage() method into a “getter” for a read-only attribute with the same name.
read-only的方式 {:1_1:} 学习了 类学的很吃力:mad: 不懂呀 完全看不懂,多看看其他相关资料 what。。。。??? 测试题:
0. issubclass(class, classinfo)
1. isinstance(object, classinfo)
2. 使用getattr方法,设置default为提示信息
3. 设置一个属性去设置定义好的属性
4. self.x = property(getXSize,setXSize,delXSize)
5. A.@staticmethod
B.@classmethod
6. def f(self):
print("I Love Kobe")
7.
class C:
def __init__(self, size=10):
self.size = size
@property
def x(self):
return self.size
@x.setter
def x(self, value):
self.size = value
@x.deleter
def x(self):
del self.size
江南孤雁 发表于 2015-11-17 15:15
类学的很吃力:mad:
我也是啊,看事情不够抽象! 学习了 {:10_266:} {:10_254:}{:10_254:}{:10_254:}得类者的天下
666{:10_256:}{:10_256:}{:10_256:} 类很烦啊