使用ini文件设置类型时创建一组对象(Python)

2024-09-30 20:26:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我在做一个智能家居项目。我有很多东西,比如一些XBee readio,led,GPS同步时钟,水计数器等等。我尝试使用OOP方法,所以我创建了许多类和子类。现在,在代码中您所要做的就是定义硬件,通过类内建函数将其连接到父级并享受。 要想得到一个想法:

coordinator = XBee24ZBCoordinator('/dev/ttyS1', 115200,
    "\x00\x13\xA2\x00\x40\x53\x56\x23", 'coord')
spalnya = XBee24ZBRemote('\x00\x13\xA2\x00\x40\x54\x1D\x12', 'spalnya')
spalnya.connectToCoordinator(coordinator)
vannaya = XBee24ZBRemote('\x00\x13\xA2\x00\x40\x54\x1D\x17', 'vannaya')    
vannaya.connectToCoordinator(coordinator)
led = LED()
led.connectTo(spalnya.getPin('DO4'), 'DO')
led.on()
led.off()

但是,我不想在代码中这样做。我想要一个ini文件来定义这个“网络”的拓扑结构。因此,我希望这个文件是可读和可编辑的人。逻辑选择是ini(相对于e.j.json作为json,当涉及到手动编辑配置文件时,至少对我来说不是超级友好)。 现在,我得到了:

[xbee-coordinator]
type = XBee24ZBCoordinator
name = coord
comport = COM4
comspeed = 115200

我可以创建一个函数BuildNetwork我的.ini,它将读取和创建所需的对象实例以及它们之间的连接。我该怎么做?有一个类xbee24zb协调器,但我从ini得到的只是一个字符串。。。你知道吗


Tags: 代码led定义inix00coordcoordinatorx13
1条回答
网友
1楼 · 发布于 2024-09-30 20:26:06

您有两种选择:

  • 在一个模块中定义所有这些类。模块只是对象,所以您可以对它们使用getattr()

    import types
    
    instance = getattr(types, typename)(arguments)
    
  • 将它们全部存储在字典中并按名称查找;您不必在字符串中键入名称,该类有一个可以重用的__name__属性:

    types = {}
    
    class XBee24ZBCoordinator():
        # class definition
    
    types[XBee24ZBCoordinator.__name__] = XBee24ZBCoordinator
    

如果这些是在'current'模块中定义的,globals()函数也会返回一个字典,因此globals()['XBee24ZBCoordinator']也是对类定义的引用。你知道吗

相关问题 更多 >