1

私はスマートホームプロジェクトに取り組んでいます。いくつかのXBeereadios、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です(構成ファイルの手動編集に関しては、jsonとしてのej jsonに対して、少なくとも私にとってはあまり友好的ではありません)。今、私は得ました:

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

必要なオブジェクトインスタンスとそれらの間の接続を読み取って作成する関数BuildNetwork('my.ini')を作成できます。どうすればいいのですか?クラスXBee24ZBCoordinatorがありますが、iniから取得するwharは単なる文字列です...

4

1 に答える 1

1

2つのオプションがあります。

  • これらすべてのクラスをモジュールで定義します。モジュールは単なるオブジェクトであるため、モジュールで使用できますgetattr()

    import types
    
    instance = getattr(types, typename)(arguments)
    
  • それらをすべて辞書に保存し、名前で調べます。文字列に名前を入力する必要はありません。クラスには、__name__再利用できる属性があります。

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

これらが「current」モジュールで定義されている場合、globals()関数はディクショナリも返すためglobals()['XBee24ZBCoordinator']、クラス定義への参照も返されます。

于 2013-01-12T18:15:41.523 に答える