Как реализовать шаблон стратегии с зависимостями базового класса? - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь реализовать шаблон стратегии и собираюсь сделать ответ в Stack Strat Pattern . Но понял, что я не смогу скопировать его прямо с летучей мыши. Я хочу реализовать шаблон, но также убедиться, что мои executeReplacement функции наследуются от базового класса.

class DB():

    def __init__(self, league, season, func=None):
        self.db_user = os.environ.get('DB_user')
        self.db_pass = os.environ.get('DB_pass')
        self.MONGODB_URL = f'mongodb+srv://{db_user}:{db_pass}@database-mbqxj.mongodb.net/test?retryWrites=true&w=majority'
        self.client = MongoClient(MONGODB_URL)
        self.DATABASE = client["Database"]
        self.league = league
        self.season = season
        self.pool = multiprocessing.cpu_count()
        if func:
            self.execute = func

        def execute(self):
            print("No execution specified")

def executeReplacement1():
    """Should inherit the the properties of the base class
    since it's dependant on it's properties (Connect to Database etc.)"""
    print("Push some data to DATABASE")


def executeReplacement2():
    """Should inherit the the properties of the base class
    since it's dependant on it's properties (Connect to Database etc.)"""
    print("Push some other data to DATABASE")

Как построить шаблон стратегии, чтобы функции замены наследовали свойства базовый класс? Или это, возможно, не оптимальный подход?

Цель состоит в том, чтобы разобрать аргументы из stdin, например:

`db --pu sh EN_PR 2019 player``

Который создаст экземпляр класса DB, в котором методы связаны с push, где push - это функция, которая загружает данные в базу данных.

1 Ответ

1 голос
/ 04 мая 2020

Функция должна быть определена так, чтобы принимать DB экземпляр в качестве аргумента, тогда DB.execute может передать self при вызове.

class DB():

    def __init__(self, league, season, func=None):
        self.db_user = os.environ.get('DB_user')
        self.db_pass = os.environ.get('DB_pass')
        self.MONGODB_URL = f'mongodb+srv://{db_user}:{db_pass}@database-mbqxj.mongodb.net/test?retryWrites=true&w=majority'
        self.client = MongoClient(MONGODB_URL)
        self.DATABASE = client["Database"]
        self.league = league
        self.season = season
        self.pool = multiprocessing.cpu_count()
        <b>self.func = func</b>

        def execute(self):
            <b>if self.func is not None:
                return self.func(self)</b>

def executeReplacement1(<b>db</b>):
    print("Push some data to DATABASE")


def executeReplacement2(<b>db</b>):
    print("Push some other data to DATABASE")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...