python методов, вызываемых в определенном порядке - PullRequest
0 голосов
/ 26 мая 2020
• 1000 они создают. Это похоже на вариант использования @property?

Есть ли способ определить в Python, какие методы должны вызываться автоматически с помощью некоторого декоратора, чтобы я мог смягчить последствия использования метода execute?

Ниже приведен простой пример:

import pandas as pd


class Preprocessor:
    def __init__(self, df=pd.DataFrame([]), some_cond=False):
        assert len(df)
        assert isinstance(some_cond, bool)

        self.some_cond = some_cond
        self.df = df
        self.cols = ["col1", "col3"]

    def filter_columns(self):
        for c in self.cols:
            assert c in self.df.columns
        self.df = self.df[self.cols]

    def filter_rows(self):
        self.df = self.df[self.df["foo"] == self.some_cond]

    def execute(self):
        self.filter_columns()
        self.filter_rows()


df = pd.DataFrame(data={"foo": [True, False, True, False, True], "bar": ["a", "a", "b", "b", "a"]})
pp = Preprocessor(df, some_cond=True).execute()
df = pp.df

EDIT:

import pandas as pd


class Preprocessor:
    def __init__(self, df=pd.DataFrame([]), some_cond=False):
        assert len(df)
        assert isinstance(some_cond, bool)

        self.some_cond = some_cond
        self.df = df
        self.cols = ["col1", "col3"]

        self.filter_columns()
        self.filter_rows()

    def filter_columns(self):
        for c in self.cols:
            assert c in self.df.columns
        self.df = self.df[self.cols]

    def filter_rows(self):
        self.df = self.df[self.df["foo"] == self.some_cond]


df = pd.DataFrame(data={"foo": [True, False, True, False, True], "bar": ["a", "a", "b", "b", "a"]})
df = Preprocessor(df, some_cond=True).df

Так что что-то больше похоже на поведение входа и выхода.

...