小编Roh*_*ohi的帖子

经理/容器类,怎么样?

我目前正在设计一个需要管理某个硬件设置的软件.

硬件设置如下:

系统设计

系统 - 系统包含两个相同的设备,并具有相对于整个系统的某些功能.

设备 - 每个设备包含两个相同的子设备,并且具有相对于两个子设备的某些功能.

子设备 - 每个子设备有4个可配置实体(通过相同的硬件命令控制 - 因此我不将它们视为子子设备).

我想要实现的目标:

我想通过系统管理器控制所有可配置实体(实体以串行方式计数),这意味着我可以执行以下操作:

system_instance = system_manager_class(some_params)
system_instance.some_func(0) # configure device_manager[0].sub_device_manager[0].entity[0]
system_instance.some_func(5) # configure device_manager[0].sub_device_manager[1].entity[1]
system_instance.some_func(8) # configure device_manager[1].sub_device_manager[1].entity[0]
Run Code Online (Sandbox Code Playgroud)

我想到的是:

我正在考虑创建一个抽象类,它包含所有子设备函数(调用转换函数)并让system_manager,device_manager和sub_device_manager继承它.因此,所有类都将具有相同的函数名称,我将能够通过系统管理器访问它们.围绕这些线的东西:

class abs_sub_device():
    @staticmethod
    def convert_entity(self):
        sub_manager = None
        sub_entity_num = None
        pass

    def set_entity_to_2(entity_num):
        sub_manager, sub_manager_entity_num = self.convert_entity(entity_num)
        sub_manager.some_func(sub_manager_entity_num)


class system_manager(abs_sub_device):
    def __init__(self):
        self.device_manager_list = [] # Initiliaze device list
        self.device_manager_list.append(device_manager())
        self.device_manager_list.append(device_manager())

    def convert_entity(self, entity_num):
        relevant_device_manager = self.device_manager_list[entity_num // 4]
        relevant_entity         = entity_num % 4
        return relevant_device_manage, relevant_entity …
Run Code Online (Sandbox Code Playgroud)

python object-oriented-analysis python-3.x

10
推荐指数
1
解决办法
472
查看次数

保证在流程终止时要求销毁

在阅读了很多关于这个主题的数据之后,我仍然找不到任何解决我问题的方法(可能没有).

我的问题如下:

在我的项目中,我有多个驱动程序使用各种硬件(IO管理器,可编程负载,电源等).

初始化连接到这些硬件的成本很高(时间),和我不能打开,然后关闭了我们之间的每一次迭代的通信连接.

意思是我不能这样做(假设可编程加载实现进入/退出):

start of code...

with programmable_load(args) as program_instance:
     programmable_load_instance.do_something()

rest of code...
Run Code Online (Sandbox Code Playgroud)

所以我选择了另一种解决方案:

class programmable_load():
    def __init__(self):
         self.handler = handler_creator()
    def close_connection(self):
         self.handler.close_connection()
         self.handler = None
    def __del__(self):
         if (self.handler != None):
             self.close_connection()
Run Code Online (Sandbox Code Playgroud)

出于显而易见的原因,我不"信任"析构函数实际被调用,因此当我想结束我的程序时(对于所有驱动程序),我明确地调用close_connection().

当我突然终止进程时会出现问题,例如当我通过调试模式运行并退出调试时.

在这些情况下,进程终止而不运行任何析构函数.我知道操作系统会清除此时未使用的所有内存,但有没有办法以有条理的方式清除内存?

如果没有,有没有办法让退出调试功能通过一组特定的功能?python进程是否知道它有一个非常好的调试事件,还是将它视为正常终止?

操作系统:Windows

python operating-system python-3.x

6
推荐指数
1
解决办法
177
查看次数

面向对象的设计 - 形状

因此,经过多年的OOP,我从一个大学课程中完成了一个非常简单的家庭作业,以实现一个简单的面向对象的结构.

要求的设计:

  • 实现面向对象的解决方案以创建以下形状:

  • 椭圆,圆,正方形,矩形,三角形,平行四边形.

  • 创建的每个形状必须具有以下参数:唯一ID,颜色.

以下功能:颜色变化,移动,区域,周长,内部,复制.

不需要有效性测试(不在类中,也不在用户输入中).

我的设计:

在此输入图像描述

总的来说,一个非常简单的方法,shape_class/non-circular是抽象的,矩形/方形被组合成一个类,因为它们包含完全相同的参数,并且不需要有效性测试(没有理由将它们分成两个).

Shape类 - 实现静态id(唯一id)和处理颜色名称的init函数.

public abstract class shape_class {

    static int STATIC_ID;
    int id;
    String color_name;

    public shape_class(String color_name_input) {
        this.id = STATIC_ID;
        shape_class.STATIC_ID+=1;
        if (Arrays.asList(toycad_globals.ALLOWED_COLORS).contains(color_name_input))
        {
            this.color_name = color_name_input;
        }
    }

    public void change_color(String color_name_input) {
        if (Arrays.asList(toycad_globals.ALLOWED_COLORS).contains(color_name_input)) {
            this.color_name = color_name_input;
        }
    }

    public abstract shape_class return_copy();
    public abstract void move(double x, double y);
    public abstract double area();
    public abstract double circumference();
    public abstract boolean …
Run Code Online (Sandbox Code Playgroud)

java oop inheritance

4
推荐指数
1
解决办法
905
查看次数