Использование метода stati c в Python - PullRequest
0 голосов
/ 17 февраля 2020

Недавно я наткнулся на код для создания линейчатых диаграмм, и мне интересно, зачем нужен метод stati c для функции в python. Вдобавок к этому, почему self.function_name используется для статического метода. Вот код:

class Foo :
    @staticmethod
    def make_bar_plot(values, labels, title, ylabel='Activity Count', step=10):

        x_pos = np.arange(len(labels))

        plt.bar(x_pos, values, align='center', alpha=0.5)
        plt.xticks(x_pos, labels)
        plt.yticks(np.arange(0, max(values) + step, step))

        plt.ylabel(ylabel)
        plt.title(title)

        for index, val in enumerate(values):
            plt.text(x=index, y=val+1, s=f'{val}')

        plt.show()
    def get_daywise_activity_stats(self, event_name, no_of_days):

        query = """select edate, count(*)
                    from %s
                        where ip_address not in (
                            select distinct(ip_address)
                            from activity_classic_class_section_start
                                where edate <'2019-12-31')
                        group by edate order by edate desc limit %s;
                        """%(event_name, no_of_days)

        event_dict = {ele[0].strftime("%m/%d/%Y"):ele[1] for ele in self.rs_conn.query(query)}
        print (event_dict)

        labels = list(event_dict.keys())
        values = list(event_dict.values())
        self.make_bar_plot(values, labels, 'Daywise_activity_stats -> '+event_name)

Не работают ли методы stati c без self.function_name и не работают с class_name.function_name или я что-то упустил здесь что-то важное?

1 Ответ

0 голосов
/ 17 февраля 2020

Вы также можете позвонить make_bar_plot следующим образом:

Foo.make_bar_plot(values, labels, 'Daywise_activity_stats -> '+event_name)

Он будет таким же, как ваш код. Вам нужно сослаться на свой класс - вы можете сделать это либо self, потому что каждый экземпляр класса будет иметь ссылку на метод make_bar_plot stati c, либо путем присвоения имени класса FOO. Результат будет таким же.

...