2014-01-29 57 views
0

在python 2.7下。Python - 無法調用只傳遞自變量的方法

如何處理那些只通過一個參數,「自我」的方法?

class MyTwitterClass(object): 
    ... 
    def keys(self): 
     return { 
      'consumer_key': self.read_settings().get('Keys', 'consumer_key'), 
      "consumer_secret": self.read_settings().get('Keys', 'consumer_secret'), 
      "access_token_key": self.read_settings().get('Keys', 'access_token_key'), 
      "access_token_secret": self.read_settings().get('Keys', 'access_token_secret') 
     } 

    api = twitter.Api(consumer_key=keys()['consumer_key'], 
         consumer_secret=keys()['consumer_secret'], 
         access_token_key=keys()['access_token_key'], 
         access_token_secret=keys()['access_token_secret']) 

我得到的錯誤是:

Traceback (most recent call): 
    File "..." ... 
    ... 
    api = twitter.Api(consumer_key=keys()['consumer_key'], 
    TypeError: keys() takes exactly 1 argument (0 given) 

任何想法將受到歡迎。

+1

這是一個實例方法。它需要在一個實例上調用,像'twitterObject.keys()' – njzk2

+0

你可以請驗證你的問題的縮進符合你的實際代碼? – Johnsyweb

回答

5

keys()是你的類的方法。要自動傳遞self參數,你必須調用這種方式:

c = MyTwitterClass() 
keys = c.keys() 

所以,我建議你添加一個get_api()方法類:

class MyTwitterClass(object): 
    ... 
    def keys(self): 
     return { 
      'consumer_key': self.read_settings().get('Keys', 'consumer_key'), 
      "consumer_secret": self.read_settings().get('Keys', 'consumer_secret'), 
      "access_token_key": self.read_settings().get('Keys', 'access_token_key'), 
      "access_token_secret": self.read_settings().get('Keys', 'access_token_secret') 
     } 

    def get_api(self): 
     keys = self.keys() # self refer to the current instance of your class 
     api = twitter.Api(consumer_key=keys['consumer_key'], 
          consumer_secret=keys['consumer_secret'], 
          access_token_key=keys['access_token_key'], 
          access_token_secret=keys['access_token_secret']) 

     return api 

# Now, you can do : 

c = MyTwitterClass() 
api = c.get_api() 
+0

這就是答案!謝謝。 –

+0

不客氣!請記住接受這個答案,如果它幫助你;) –

+0

簡單而有效的+1 :) – zx81

0

您需要調用實例方法。 keys()是一個方法,它可以調用每一個MyTwitterClass對象上,或者用self如果你是在類本身