2013-01-12 46 views
1

我正在開發一個智能家居項目。我有一堆作品,比如一些XBee readios,LED,GPS同步時鐘,水計數器等。我嘗試使用OOP方法,因此我創建了許多類和子類。現在,您需要在代碼中完成的任務是定義硬件,並將其通過班級內置功能連接到父母並享受。 爲了得到一個想法:當它們的類型由ini文件設置時,創建一組對象(Python)

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(「my.ini文件」),將讀取並在它們之間創建所需的對象實例和連接。我該怎麼做?還有一類XBee24ZBCoordinator,但whar我從項目最初得到的是隻是一個字符串...

+0

你可以使用python作爲你的配置文件語法嗎?這可能是兩全其美。 – SingleNegationElimination

回答

1

你有兩個選擇:

  • 定義模塊中的所有這些類。模塊只是對象,這樣你就可以對他們使用getattr()

    import types 
    
    instance = getattr(types, typename)(arguments) 
    
  • 存儲他們所有的字典,並通過名稱查找起來;你不必在一個字符串輸入出了名,班裏有一個__name__屬性,你可以重複使用:

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

如果這些「當前」模塊中定義的,globals()功能也會返回一個字典,因此globals()['XBee24ZBCoordinator']也是對類定義的引用。

相關問題