繁体   English   中英

Python-无法调用仅传递自变量的方法

[英]Python - Can't call a method passing only self argument

在python 2.7下

如何处理那些只传递一个参数“自我”的方法?

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)

任何想法都将受到欢迎。

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()

您需要调用实例方法。 keys()是一个方法,您可以在每个MyTwitterClass对象上调用,或者如果您在类本身中,则可以使用self进行调用

obj = MyTwitterClass()
[...]
api = twitter.Api(consumer_key=obj.keys()['consumer_key'],
                  consumer_secret=obj.keys()['consumer_secret'],
                  access_token_key=obj.keys()['access_token_key'],
                  access_token_secret=obj.keys()['access_token_secret'])
                                      ^^^^
                                     note this addition

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM