代码之家  ›  专栏  ›  技术社区  ›  Mathieu

在一个函数中创建一个由类组成的系统,并在主要部分中使用

  •  1
  • Mathieu  · 技术社区  · 8 年前

    我有一个python脚本,它由以下部分组成:

    Class1
    Class2
    Class3
    Class4
    ...
    + some functions
    

    每个类实际上模拟系统的组件(数模转换器、微控制器、串行外围接口等)。为了创建这个系统,我在主要部分做了以下工作:

    if __name__ == '__main__':
        elt1 = Class1(param1)
        elt2 = Class1(param2)
        elt3 = Class1(param3)
        elt1 = Class2(param4)
        ...
    

    我想定义一个函数: creation of the system

    def creation_system(parameters):
        elt1 = Class1(param1)
        elt2 = Class1(param2)
        elt3 = Class1(param3)
        elt1 = Class2(param4)
        ...
    

    系统现在定义在函数的本地内存空间中,我想在主要部分访问它,以便执行以下操作:

    if __name__ == '__main__':
        for simulation_parameter in parameters:
            creation_system(parameters)
            compute()
            save_result()
    

    谢谢:)

    2 回复  |  直到 8 年前
        1
  •  1
  •   Amedeo    8 年前

    System 包含所有元素的类。然后将参数传递给这个类的构造函数。

    class System(object):
    
        def __init__(self, parameters):
            self.element0 = Class0 (parameters[0])
            self.element1 = Class1 (parameters[1])
            self.element2 = Class2 (parameters[2])
    
        def compute(): 
            ....
    
        def save_result():
            ....
    
    if __name__ == '__main__':
        parameters = ...
        mySystem = System(parameters)
        mySystem.compute()
        mySystem.save_result()
    

    或者,您可以拥有一个仅包含所有系统通用元素的常规类(类似于上面的一个),然后创建继承自上一个类并具有特殊行为的新类:

    class SpecificSystem(System):
    
        def __init__(self, parameters):
            super().__init__(parameters)
            # Additional elements specific to this system
            self.element3 = Class3 (parameters[3])
    
        def compute():
            # Behavior specific to this system
            ....
    
        # Retain save_result() from superclass
    
        2
  •  2
  •   bassman    8 年前

    我假设你有两个脚本叫做 components.py 和中定义的组件类和函数 main.py 这是要运行的主代码。

    __all__ 中的属性 组件.py 其中包含所有组件类的名称,如:

    __all__ = ['Class1', 'Class2', 'Class3', ...(and so on)]
    

    然后在 主.py 有一个for循环 :

    import components
    
    if __name__ == "__main__":
        comp_dict = {}
        for cls_name in components.__all__:
            comp_dict[cls_name] = getattr(components, cls_name)()
    

    我们所做的就是让所有的课程 内置函数并在for循环中实例化。