python - 当 ini 文件设置类型时创建一组对象 (Python)

标签 python class dynamic

我正在开发一个智能家居项目。我有很多东西,比如一些 XBee readios、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 在手动编辑配置文件时至少对我来说不是 super 友好)。 现在,我得到了:

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

我可以创建一个函数 BuildNetwork('my.ini'),它将读取并创建所需的对象实例以及它们之间的连接。我该怎么做?有一个类 XBee24ZBCoordinator,但我从 ini 得到的只是一个字符串...

最佳答案

您有两个选择:

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

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

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

如果这些是在“当前”模块中定义的,则 globals() 函数也会返回一个字典,因此 globals()['XBee24ZBCoordinator'] 是一个引用以及类定义。

关于python - 当 ini 文件设置类型时创建一组对象 (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14296380/

相关文章:

python按空格和换行符拆分字符串

python - 将数据框列转换为字典

python - XQuery 到 API Python 字符串

java - 如果一个文件中有多个类,Java 是否需要一个公共(public)类?

java - Java中的可变长度(动态)数组

java - 在运行时用 Java 创建 n 维数组

c# - 使用 AssemblyBuilder 构建资源程序集

python - 限制对仅拥有的内容 django 的访问

c++ - 我什么时候需要默认构造函数?

html - CSS设置div颜色,当diva :hover