我目前正在设计一个需要管理某个硬件设置的软件.
硬件设置如下:
系统 - 系统包含两个相同的设备,并具有相对于整个系统的某些功能.
设备 - 每个设备包含两个相同的子设备,并且具有相对于两个子设备的某些功能.
子设备 - 每个子设备有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) 在阅读了很多关于这个主题的数据之后,我仍然找不到任何解决我问题的方法(可能没有).
我的问题如下:
在我的项目中,我有多个驱动程序使用各种硬件(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
因此,经过多年的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)