静态方法将自称称为“此类”;蟒蛇

时间:2016-03-05 16:17:45

标签: python class python-3.x static-methods

我正在尝试构建一个ETL机器进行测试。

class TestETLMachine(object):

    API_URL = 'https://9g9xhayrh5.execute-api.us-west-2.amazonaws.com/test/data'

    @staticmethod
    def get_email_data(cls):
        headers = {'accept': 'application/json'}
        r = requests.get(cls.API_URL, headers=headers)
        email_objects_as_list_of_dicts = json.loads(r.content)['data']
        return email_objects_as_list_of_dicts

    @staticmethod
    def get_distinct_emails(cls):
        email_data = cls.get_email_data()
        print email_data

for get_distinct_emails我想打电话给TestETLMachine.get_email_data()并让它知道我指的是这个课程。这个对象是一个静态机器,意味着它总是做同样的事情,并且使它的实例是毫无意义的并且看起来很糟糕。当我尝试拨打get_email_data时,我已经通过了cls,我再也不能了:

In [9]: TestETLMachine.get_email_data()
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-9-cf48fc1a9c1d> in <module>()
----> 1 TestETLMachine.get_email_data()

TypeError: get_email_data() takes exactly 1 argument (0 given)

如何在下一个类方法中调用这些类方法并使用其他类方法?萨拉马特

1 个答案:

答案 0 :(得分:7)

您正在寻找classmethod,而不是staticmethod。如果使用@classmethod修饰方法,它将隐式接收该类作为第一个参数。

另请参阅相关问题Meaning of @classmethod and @staticmethod for beginner?