Hirdetés

Keresés

Új hozzászólás Aktív témák

  • cousin333

    addikt

    válasz atesss #2833 üzenetére

    A namedtuple egy "gyártó függvény" (factory function), aminek az eredménye ebben az esetben egy osztály lesz (mintha mondjuk nem kellene megírnod a Kör osztályt előre, hanem futás közben dinamikusan hoznád létre). Az i2c_io_pinout tehát lényegében egy osztály (amit talán elegánsabb lenne ennek megfelelően camel-case-el jelölni: pl. I2cIoPinout), az i2c_io_state meg valóban egy példány.

    Az adott számú "kulcsnevet" vagy az eredeti elnevezés tömbbel éred el, vagy a _fields paraméterrel. Pl.:

    i2c_io_state._fields[1]

    Őszintén szólva nem tudom, mire kell, de nekem az a véleményem, hogy ha ezt akarod elérni, akkor nem jól használod a típust, hiszen ez pont arra lenne jó, hogy ne kelljen ismerni a sorrendet a létrehozást követően.

    Alapvetően én az egész külső IC-nek egy osztályt hoznék létre, hasonlóan a már létező I2C, SPI... stb. osztályokhoz, ami aztán minden létező funkciót egy névtérbe "csomagol". Valami ilyesmi struktúrával:

    class IoModule(object):

        MASK_SWITCH1 = 0x30

        def __init__(self, interface):
            self.port = interface
          self.portA_status = None
          self.portB_status = None

        def connect(self):
            .... # connect here

        def close(self):
            self.port.close()

        def update_ports(self):
          self.portA_status = self.port.read(<reg_portA>)
    self.portB_status = self.port.read(<reg_portB>)

      def compare_portA(self):
            port_old = self.portA_status
            self.update_ports()
            port = self.portA_status

            return port & port_old

        @property
        def id(self):
            return self.port.read(<id_reg>)

        @property
        def Switch1(self):
            return True if self.port_status & self.MASK_SWITCH else False

    Ebben az esetben az osztályunk példányosításkor megkapja az interfészt (ami ebben az esetben egy I2C objektum), és azt használja a továbbiakban. A fenti kód elég kezdetleges, csak a struktúrát akartam megmutatni.

    ui: ha listaelemeken akarsz végigmenni, akkor ne használd a range(len(x)) formulát. Ha az elem kell, akkor

    for elem in lista:
        print(elem)

    Ha kell a sorszám is, akkor enumerate:

    for i, elem in enumerate(lista):
        print('Az', i, 'elem a(z)', elem)

    Ha pedig több egyforma listád van, akkor zip:

    for elemA, elemB in zip(listaA, listaB):
        print('Az A eleme:', elemA, 'a B eleme pedig:', elemB)

    [ Szerkesztve ]

    "We spared no expense"

Új hozzászólás Aktív témák