Diskuze: Tvorba objektů podle řetězce
Tvůrce
Zobrazeno 10 zpráv z 10.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
OPERACE = [Plus, Minus, Deleno]
operatory = {o.znak: o for o in OPERACE}
objekty = [operatory[r] for r in retezec]
# nebo
objekty = list(map(operatory.get, retezec))
A protože jsi v Pythonu, tak většinou není důvod, proč dědit od
nějakého společného předka.
To jsou neřesti statických jazyků, Python nemá statické definice
kontraktů.
Když už bys mermomocí chtěl mít společnost třídu, je v tom případě
lepší mít jen jednu třídu Operator a zacházet s jejíma instancema.
Předseda má pravdu, ty jsi asi chtěl něco jako pythoní switch.
operatory = {Plus.znak: Plus,
Minus.znak: Minus,
...
}
Použití:
minus = operatory["-"]()
No, díky za snahu, omlouvám se za zbytečný dotaz a za ztracený čas. Nakonec jsem našel perfektní věc:
class Operator:
pass
class Plus(Operator):
pass
class Minus(Operator):
pass
print(Operator.__subclasses__())
Ta metoda __subclasses__ je to, co jsem hledal Zajímavé je, že mi ji IDLE v našeptávači neukázalo.
Tohle nedělej, tohle použití tříd není dobré a při čemkoliv
složitějším to začne zlobit.
Lepší je jedna třída s instancema.
class Operator:
def __init__(self, code):
self.code = code
def __repr__(self):
return self.code
operators = [Operator('+'), Operator('-'), Operator('*')]
print(operators)
# nebo
operators = [Operator(i) for i in '+-*']
print(operators)
No, každý operátor má bohužel jinou metodu. Každopádně díky za tip do budoucna.
No a? Jsi v pythonu, funkce je first-class citizen, je to o to jednodušší, pokud je to jedna metoda.
Tady jsi na devbooku, tady máme rádi OOP
Ale vážně, Ondřeji, nedělej věci komplikovaně, když je můžeš
dělat jednoduše.
To je velmi oficiální doporučení:
https://www.youtube.com/watch?…
Zobrazeno 10 zpráv z 10.