比在Python中的类之间传递相同的参数更好的方法

时间:2019-05-15 17:18:16

标签: python-3.x oop

我有一个与OOP有关的问题,但应在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,但是,当从Class A和Class B初始化super()时,读取文件的函数read_user_parameters()将被调用两次(乘以数十次)。是否有比方法1更好的解决方案,在该方法中,我只调用一次read_user_parameters()而不需要为所有类传递参数?

谢谢您的时间。

1 个答案:

答案 0 :(得分:1)

为什么不只有一个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>")