我正在尝试构建一个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)
如何在下一个类方法中调用这些类方法并使用其他类方法?萨拉马特
答案 0 :(得分:7)
您正在寻找classmethod
,而不是staticmethod
。如果使用@classmethod
修饰方法,它将隐式接收该类作为第一个参数。
另请参阅相关问题Meaning of @classmethod and @staticmethod for beginner?