Pythonban hogy lehet a legelegánsabban biztosítani, hogy egy lista tartalma mindig megfeleljen egy bizonyos feltételnek?
A konkrét szitu nyilván nem ez, de példának megteszi, hogy pl csak "xyz"-vel kezdődő stringek lehessenek benne, és abból is legfeljebb 5 darab.
Bármikor, amikor változik a lista (append, extend, setitem, stb) vagy egy új példányt ad magából (add vagy szorzás operátor) le kéne futnia egy ilyen assert len(self)<=5 and all(x.startswith("xyz") for x in self) jellegű dolognak, hogy rögtön hibát dobjon, ha sérülnek a feltételek.
Az egyetlen ötletem, hogy a SpecialList(list) class-nak minden metódusába egyesével beszurkálom az ellenőrzésemet, de hátha van valami dekorátoros szebb/kész megoldás erre, pl: MyList = ConstrainedList(my_checker_function) és MyList(["xyz-maci", "xyz-laci"])
Ilyesmi, csak lehetőleg anélkül hogy az összes létező list methodra külön-külön meg kelljen csinálni. Közben találtam valamit amivel talán kevésbé fájdalmas: [link]
Ezt gondolom úgy kéne módosítani, hogy lenne egy callback a helyben módosító metódusoknak és egy másik callback az új listát produkáló metódusoknak. Az előbbieknél csak le kell futtatni az ellenőrzést a végén, a másiknál meg a visszaadott listát át kell tolni a konstruktoron, amiben ott van az ellenőrzés.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!