我是新来的,正在试用python中的property()。我看到一个例子,并试图执行,但我收到一个错误。我尝试了以下代码:
class proper(object):
def __init__(self):
self.x = 4
def setx(self,val):
self.x = val
def getx(self):
return self.x
def delx(self):
del self.x
p = property(setx,getx,delx,'i am doc')
pr = proper()
pr.setx(7)
print pr.getx()
错误:
Traceback (most recent call last):
File "./test3.py", line 148, in <module>
pr.p=5
TypeError: getx() takes exactly 1 argument (2 given)
您误解了如何访问属性
改编自Python documentation for ^{} :
如果
pr
是proper
的实例,pr.x
将调用getx
,pr.x = setx
将调用setter和del pr.x
deleter,delx
因此,您不应该将其称为
pr.setx(7)
您得到的错误是因为您创建的
p
属性的参数顺序错误尝试:
发生此错误的原因是在应调用
setx
时调用了getx
。因为他们有不同数量的争论,这是破坏性的请注意,设置属性的一种更优雅的方法是在定义访问器方法时使用decorator:
我不知道第148行是什么-但它没有提到你发布的代码
使用属性的关键在于,您可以定义使数据项看起来像属性的方法
使用发布的类定义,您现在可以执行以下操作:
这是一个非常基本和多余的属性使用
但是假设你把setx定义为:
现在有了一个特殊的属性x,它永远不能为负。注意我还不能测试这个,因为我没有访问Python实现的权限
相关问题 更多 >
编程相关推荐