Új hozzászólás Aktív témák
-
cousin333
addikt
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
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest