Python 将对象传递到它自己的初始化中?

Python 将对象传递到它自己的初始化中?,python,recursion,google-analytics,Python,Recursion,Google Analytics,我目前正在尝试使用GA报告API。我创建了一个查询对象,它基本上在实例化查询时获取查询的所有参数 但是,我希望在查询本身的初始化中获得查询的结果。我有一种将查询对象转换为一组结果的方法,称为query_to_results(x),其中参数x是一个查询对象 现在,我正在创建一个带有空results参数的查询对象,然后使用setter方法将结果添加到查询中。但是,我希望在创建对象的初始化过程中得到结果。有什么简单的方法可以做到这一点吗 我会假设大致如下: self.results = query_t

我目前正在尝试使用GA报告API。我创建了一个查询对象,它基本上在实例化查询时获取查询的所有参数

但是,我希望在查询本身的初始化中获得查询的结果。我有一种将查询对象转换为一组结果的方法,称为query_to_results(x),其中参数x是一个查询对象

现在,我正在创建一个带有空results参数的查询对象,然后使用setter方法将结果添加到查询中。但是,我希望在创建对象的初始化过程中得到结果。有什么简单的方法可以做到这一点吗

我会假设大致如下:

self.results = query_to_results(self)
除非这不起作用,否则会起作用

这是创建查询objectL的代码

class Query(object):
    def __init__(self,number_of_date_ranges):
        self.segments = gw.get_segments()
        self.sites = gw.get_sites_for_query()
        self.dates = []
        self.service = gw.service
        self.dim_met = gw.get_arguments()
        self.dimensions = self.dim_met[0]
        self.metrics = self.dim_met[1]
        self.results = []
        for x in range (number_of_date_ranges):
            self.dates.append(gw.get_dates())
    def __str__(self):
        output_string = 'segments:'
        for x in self.segments:
            output_string += str(x)
        output_string += '\n\nsites:\n'
        for y in self.sites:
            output_string += str(y)
        output_string += '\n\ndates:\n' 
        for z in self.dates:
            output_string+=str(z.items())
        output_string += ('\n\n'+'dimensions:'+self.dimensions+'\n\n'+'metrics:\n'+self.metrics)
        return output_string
    def get_segments(self):
        return self.segments
    def get_sites(self):
        return self.sites
    def get_dates(self):
        return self.dates
    def get_dimensions(self):
        return self.dimensions
    def get_metrics(self):
        return self.metrics
    def get_service(self):
        return self.service
    def get_results(self):
        return self.results
    def set_results(self,query_object):
        self.results = query_to_results(query_object)
这是将对象转化为一组结果的代码:

def get_results(service,profile_id,segment_id,date1,date2,dimensionString,metricString):
    try:
        return service.data().ga().get(
            ids='ga:' + profile_id,
            start_date=date1,
            end_date=date2,
            segment=segment_id,
            dimensions=dimensionString,
            metrics=metricString).execute()

def query_to_results(query_object):
    service = hello_analytics_api_v3_auth.initialize_service()
    accounts = service.management().accounts().list().execute()
    results_list = []
    parameters = extract_arguments(query_object)
    for site in parameters['profiles']:
        for segment in parameters['segments']:
            for dates in range (len(parameters['dates'])):
                results_list.append(get_results(service,site,segment,parameters['dates'][dates]['start'],parameters['dates'][dates]['end'],parameters['dimensions'],parameters['metrics']))
                time.sleep(0.5)
            time.sleep(0.1)
        time.sleep(0.1)
    time.sleep(0.1)
    return results_list


def extract_arguments(query_object):
    """Gets Arguments From Query Object. If no Segments given, assumes all visits. If no metrics given, assumes visits"""
    metricString = ''
    dimensionString = ''
    dateList = []
    segmentList = []
    webPropertyIdList = []
    for x in query_object.get_sites():
        webPropertyIdList.append(gw.site_name_to_true_webPropertyId[x])
    for y in query_object.get_segments():
        segmentList.append('gaid::'+str(y))
    for z in query_object.get_dates():
        dateList.append(z)
    if len(segmentList)==0:
        segmentList.append('gaid::-1')
    dimensionString = query_object.get_dimensions()
    metricString = query_object.get_metrics()
    if len(metricString)==0:
        metricString = 'ga:visits'
    return {"metrics":metricString,
            "dimensions":dimensionString,
            "dates":dateList,
            "segments":segmentList,
            "profiles":webPropertyIdList}

什么和如何不起作用?我想将self.results=query\u to\u results(self)添加到初始化中,但这只是返回一个空列表。在调用它之前,您是否初始化了query\u to\u result工作所需的所有属性?据我所知-是。我只是将self.results=[]替换为self.results=query\u to\u results(self)。因为这是最后一个被初始化的东西,所以在我看来,似乎所有其他必要的东西都应该被初始化。我知道您需要在计算中使用
dates
属性,但它是在
self.results=
call之后设置的