Python Class属性没有正确地获取参数

时间:2012-08-10 03:39:42

标签: python class properties

此类应该接受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

1 个答案:

答案 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