2012-08-10 47 views
0

該類應該接受Keys屬性的參數,但是當我嘗試MyUserInstance.Keys('foo')時,它不起作用。相反,它表示TypeError: Keys() takes exactly 2 arguments (1 given)。它怎麼錯了?Python類屬性沒有正確接受參數

# 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 

回答

5

Keys是類的一個實例的綁定屬性。這意味着你必須先有一個實例。

user = User() 
user.Keys = "foo" 

也擺脫集合arg。這是一個吸氣。你只能在setter上定義arg。

它看起來應該只是一種方法。所以實際上,擺脫了財產裝飾和使用:user.keys(「富」)

你可以閱讀有關如何定義的getter,setter方法,並刪除器在這裏:http://docs.python.org/library/functions.html#property

而且蟒蛇慣例通常會儲備類名的大寫。這將是User.keys

+0

感謝您的回覆,但我認爲我已經把你放錯了路。爲了清晰起見,我編輯了這個問題。假設我已經有一個實例。我只想用'collection'作爲參數從我的數據庫中返回一個字典。爲什麼它告訴我我清楚地指出了錯誤的參數數目,我不知道? – MFB 2012-08-10 03:57:18

+1

是的資本命名使它看起來像班級。但其餘答案仍然正確。您使用的是財產錯誤。他們不採取參議員。刪除屬性修飾器並使其成爲一種常規方法,並且它將按照您使用它的方式工作。 – jdi 2012-08-10 04:05:03

+0

非常感謝併爲此感到抱歉。 – MFB 2012-08-10 04:08:29