0

这个类应该接受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
4

1 回答 1

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

于 2012-08-10T03:43:31.770 回答