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

Python 3.x 比在Python中在类之间传递相同参数更好的方法,python-3.x,oop,Python 3.x,Oop,我有一个关于OOP的问题,但它应该用Python实现 我有一个包含所有用户参数的文件user_inputs.py 在我的主文件中,我有一个首先被调用的函数。此函数负责读取所有用户参数并返回将在程序其余部分中使用的字典 我的问题是:将用户参数字典传递给所有类的最干净的方法是什么?我用了两种方法: 方法1) 我不喜欢这种方式,因为我有几十个类需要通过这个参数。所以我想用用户参数创建一个父类: 方法2) 但是,我更喜欢方法2,当super()从类A和类B初始化时,读取文件的函数read_user_pa

我有一个关于OOP的问题,但它应该用Python实现

我有一个包含所有用户参数的文件user_inputs.py

在我的主文件中,我有一个首先被调用的函数。此函数负责读取所有用户参数并返回将在程序其余部分中使用的字典

我的问题是:将用户参数字典传递给所有类的最干净的方法是什么?我用了两种方法:

方法1)

我不喜欢这种方式,因为我有几十个类需要通过这个参数。所以我想用用户参数创建一个父类:

方法2)

但是,我更喜欢方法2,当super()从类A和类B初始化时,读取文件的函数read_user_parameters()将被调用两次(乘以几十次)。有没有比方法1更好的解决方案?在方法1中,我只调用read_user_parameters()一次,但不需要为所有类传递参数


谢谢您的时间。

为什么不只使用一个
UserParameters
类和同一类的两个对象(类名也应该是驼峰壳,而不是蛇壳)

#用户参数的单个类
类用户参数:
def_uuuinit_uuu(self,user_参数):
self.user\u参数=用户\u参数
def read_user_参数(自身):
#打开和读取所有参数等的代码。
返回self.user\u参数
#两个物体
对象\u A=用户参数(“”)
object_B=UserParameters(“”)

您是否可以拥有两个具有不同用户参数的对象?您可以创建一个具有用户参数属性的基类,该属性只读取一次,然后每个实例通过继承访问它。您可以创建一个单例类实例,并在创建子类时仅引用该实例。(尽管在这种情况下,您并不真正需要父级)。@PatrickHaugh在程序执行期间,所有类的用户参数始终相同。如果用户更改参数,程序将使用新参数再次执行。基类与类User_parameters()不同:在方法2中?@Error syntacticalreforse谢谢,我将看一看单例类。这与使用方法1相同,因为您将对象作为参数传递给每个类。我需要将这个对象传递给30多个类。我在寻找一种更干燥的方法。对象A和B实现将使用用户参数的其他代码。将user_参数作为“全局变量(本例中为dict)”,该变量应从多个模块传递给30多个类。您的第一个方法有一个函数和使用该方法的teo类。这与那不同。另外,让我编辑一下答案,得出一个更通用的解决方案:)@RaphaelIn事实上,它是不同的,谢谢。但是你使用它的方式与我的问题不同:-)也许我没有解释清楚。关键思想是:如何只读取一次文件,将内容保存在字典(用户参数)中,并将此字典传递给30多个类,而不作为参数传递给每个类?如果使用父类,则每次调用super()时都会读取该文件。。。所以这并不好,但接近我想要的。
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)
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()
#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>")