Лучше, чем передавать один и тот же аргумент среди классов в Python - PullRequest
0 голосов
/ 15 мая 2019

У меня есть вопрос, связанный с ООП, но он должен быть реализован на Python.

У меня есть файл user_inputs.py со всеми параметрами пользователя.

В моем основном файле яфункция, которая вызывается первой.Эта функция отвечает за чтение всех пользовательских параметров и возвращает словарь, который будет использоваться в остальной части программы.

Мой вопрос: какой самый чистый способ передачи словаря user_parameters всем классам?Я сделал это двумя способами:

Метод 1)

def read_user_parameters():
        # code to open and read all parameters etc.
        return user_parameters  # returns a dictionary with all the user parameters


Class A():
    def __init__(self, user_parameters):
        self.user_parameters = user_parameters


Class B():
    def __init__(self, user_parameters):
        self.user_parameters = user_parameters


user_parameters = read_user_parameters()
object_A = A(user_parameters)
object_B = B(user_parameters)

Мне не нравится этот способ, потому что у меня есть десятки классов, которым нужно передать этот аргумент.Поэтому я подумал создать родительский класс с параметрами пользователя:

Метод 2)

Class User_parameters():
    def  __init__(self, user_parameters):

    def read_user_parameters():
        # code to open and read all parameters etc.
        return user_parameters


Class A(User_parameters):
    __init__(self, user_parameters):
        super().__init__()
        # self.user_parameters comes from the parent class now


Class B(User_parameters):
    __init__(self, user_parameters):
        super().__init__()
        # self.user_parameters comes from the parent class now


object_A = A()
object_B = B()

Однако я предпочитаю метод 2, когда super () инициализируется из класса A и класса Bфункция read_user_parameters (), которая читает файл, будет вызвана дважды (умножьте это в десятки раз).Есть ли лучшее решение, чем метод 1, в котором я вызываю read_user_parameters () только один раз, но не нужно передавать аргумент для всех классов?

Спасибо за потраченное время.

1 Ответ

1 голос
/ 15 мая 2019

Почему бы просто не иметь один UserParameters класс и два объекта одного и того же класса (также имена классов должны быть верблюжьими, а не змеиными)

#Single class for user parameters
class UserParameters:
    def  __init__(self, user_parameters):
        self.user_parameters = user_parameters

    def read_user_parameters(self):
        # code to open and read all parameters etc.
        return self.user_parameters

#Two objects
object_A = UserParameters("<params>")
object_B = UserParameters("<params>")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...