此类应该接受Keys
属性的参数,但是当我尝试MyUserInstance.Keys('foo')
时,它不起作用。相反,它说TypeError: Keys() takes exactly 2 arguments (1 given)
。怎么回事?
# User
class User:
def __init__(self,
Username = 'New User',
**kwargs):
self.Username = Username
self.__dict__.update(kwargs)
@property
def Keys(self,collection):
try:
return {k:1 for k in db.UserPreferences.find_one({
'Type':'VisibleKeys',
'UserID':self._id,
'CollectionName':collection})['Keys']}
except:
return None
def __repr__(self):
return '<User: "%s">' % self.Username
答案 0 :(得分:5)
Keys是类的实例的绑定属性。这意味着您必须首先拥有一个实例。
user = User()
user.Keys = "foo"
还摆脱了集合arg。这是一个吸气剂。您只能在setter上定义arg。
看起来它应该只是一种方法。实际上,摆脱属性装饰器并使用:user.keys(“foo”)
您可以在此处阅读有关如何定义getter,setter和deleter的信息:http://docs.python.org/library/functions.html#property
python约定通常会为类名保留大写。这将是User.keys