make python @property handle =, – =等
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了make python @property handle =, – =等,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1010字,纯文字阅读大概需要2分钟。
内容图文
![make python @property handle =, – =等](/upload/InfoBanner/zyjiaocheng/818/34fbae56535d4ec7966bcb72ea541e23.jpg)
从Python documentation开始,我看到你可以设置透明处理属性的方法:
class C(object):
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.")
现在假设C._x是一个列表.在init中,它只是设置为[].所以,如果我做以下事情:
c = C()
c.x = [1,2,3]
c.x将设置为[1,2,3].我现在想做的是
#...
c.x += 4
所以c.x现在是[1,2,3,4].这个例子很简单,但显然,我希望setx和getx方法包含某种处理和检查.否则,使用这种方法将是愚蠢的.
编辑:在C上使用__add__方法来强制执行行为可能已经足够了,但我想知道是否可能将行为放在属性而不是整个类上
解决方法:
您不能为特定属性重载运算符,因为:
c.x += 4
# is equivalent to
c.x.__iadd__(4)
所以实际上你正在调用列表的__iadd__运算符.如果您希望能够这样做,则必须创建一个新类,扩展列表,并重载运算符__iadd__或__add__.
class SuperList (list):
def __iadd__ (self, other):
if type(other) == list or type(other) == SuperList:
return super(SuperList, self).__iadd__(other)
return super(SuperList, self).__iadd__ ([other])
内容总结
以上是互联网集市为您收集整理的make python @property handle =, – =等全部内容,希望文章能够帮你解决make python @property handle =, – =等所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。