为类属性分配方法

时间:2021-04-03 16:28:38

标签: python oop

我有以下一段代码,我正在尝试使用 OOP 样式在类中编写它。最终所需的输出是要返回的 full_results 列表。

import datetime
def generate_dates():
    start_date = datetime.date(2020, 8, 24)
    end_date = datetime.datetime.now().date()
    diff = (end_date - start_date).days
    start_dates = []
    end_dates = []

    i = 0
    while i < diff:
        a_date = (start_date + datetime.timedelta(days=i)).isoformat()
        b_date = (start_date + datetime.timedelta(days=i + 10)).isoformat()
        start_dates.append(a_date)
        end_dates.append(b_date)
        i += 10


    return start_dates, end_dates

dates = generate_dates()
start_dates = dates[0]
end_dates = dates[1]


def get_report(start_date, end_date):
    pass


def get_data():
    full_results = []
    for i, row in enumerate(start_dates):
        z = get_report(row, end_dates[i])
        full_results.append(z)
    return full_results

这是我在 OOP 中编写相同代码的尝试。我是新手,我不知道如何像上面所做的那样将函数分配给变量。

class GA():
    def __init__(self):
        self.dates = None
        self.start_dates = None
        self.end_dates = None

    def generate_dates(self):
        start_date = datetime.date(2020, 8, 24)
        end_date = datetime.datetime.now().date()
        diff = (end_date - start_date).days
        start_dates = []
        end_dates = []

        i = 0
        while i < diff:
            a_date = (start_date + datetime.timedelta(days=i)).isoformat()
            b_date = (start_date + datetime.timedelta(days=i + 10)).isoformat()
            start_dates.append(a_date)
            end_dates.append(b_date)
            i += 10
        return start_dates, end_dates

    dates = generate_dates()
    start_dates = dates[0]
    end_dates = dates[1]

    def get_report(self, start_date, end_date):
        pass

    def get_data(self):
        full_results = []
        for i, row in enumerate(self.start_dates):
            z = self.get_report(row, self.end_dates[i])
            full_results.append(z)
        return full_results

我尝试使用 self 引用 now 属性,但它也不起作用。具体来说,我收到错误 TypeError: generate_dates() missing 1 required positional argument: 'self'。我认为仍然有很多错误,但这是我遇到的第一个错误,因此我们将不胜感激。 附言另外,如果有更好的方法来构建/编写它,请告诉我。

1 个答案:

答案 0 :(得分:-1)

import datetime
class GA():
    def __init__(self):
        self.dates = None
        self.start_dates = None
        self.end_dates = None

    def generate_dates(self):
        start_date = datetime.date(2020, 8, 24)
        end_date = datetime.datetime.now().date()
        diff = (end_date - start_date).days
        start_dates = []
        end_dates = []

        i = 0
        while i < diff:
            a_date = (start_date + datetime.timedelta(days=i)).isoformat()
            b_date = (start_date + datetime.timedelta(days=i + 10)).isoformat()
            start_dates.append(a_date)
            end_dates.append(b_date)
            i += 10
        return start_dates, end_dates

    def get_your_function_name(self):
        self.dates = self.generate_dates()
        self.start_dates = self.dates[0]
        self.end_dates = self.dates[1]
        return [ self.dates , self.start_dates , self.end_dates ]

    def get_report(self, start_date, end_date):
        pass

    def get_data(self):
        full_results = []
        for i, row in enumerate(self.start_dates):
            z = self.get_report(row, self.end_dates[i])
            full_results.append(z)
        return full_results


GA().generate_dates()
print(GA().get_your_function_name())
相关问题