» »

Težava pri pogoju razredu [Python]

Težava pri pogoju razredu [Python]

RatedR ::

Zdravo, sem začetnik v Pythonu, trenutno sem pri razredih.
Zanima me kako v metodi __str__ postavim pogoje oz. iz kje kličem spremenljivke, ki jih želim preverjat?
Spodnji primer kode naj bi spremenil vnos npr. 14.1.2017 v 14.januar.2017, in vse ostale mesece v imena namesto številke.
class Datum:
    def __init__(self, d, m, l):
        self.dan = d
        self.mesec = m
        self.leto = l

    def __str__(self):
        if self.m == 1:
            return "{}. januar. {}" .format(d = self.dan, l = self.leto)

        if self.m == 2:
            return "{}. februar. {}" .format(d = self.dan, l = self.leto)
        
        #in tako naprej za vseh 12 mesecev
        
datum = Datum(14,1,2017)
print(datum)               #željen izpis: "14. januar, 2017

Težava je v tem, da ko v 8.vrstici poskušam preverjat vrednost, da ji lahko dodelim pravilen mesec napiše:
AttributeError: 'Datum' object has no attribute 'm'

Prosim za nasvet.
  • spremenilo: RatedR ()

jype ::

self.mesec, ne self.m (ki ga nikjer ne nastaviš).

Zgodovina sprememb…

  • spremenilo: jype ()

RatedR ::

Okej tole sem popravil, ampak še vedno dela težave, čez pogoj zdaj gre ampak se ustavi pri returnu:
File "C:\Users\...", line 9, in __str__
return ("{} januar. {}" .format(d = self.dan, l = self.leto))
IndexError: tuple index out of range

jype ::

Ja, to je narobe, bodisi takole:

return ("{} januar. {}" .format(self.dan, self.leto))

Ali pa takole:

return ("{d} januar. {l}" .format(d = self.dan, l = self.leto))

RatedR ::

Hvala lepa jype.

wungad ::

Da ne boš delal 12. if/else stavkov si naredi en tuple (class var):

MESECI = (
    'januar', 'februar', 'marec', 'april',
    'maj', 'junij', 'julij', 'avgust',
    'september', 'oktober', 'november', 'december')


In potem imas one-liner v __str__ metodi:

return "{}. {}. {}" .format(self.dan, Datum.MESECI[self.mesec], self.leto)
.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

python-rabim pomoč

Oddelek: Programiranje
162657 (887) rnla1973
»

[Python3] Izvajanje ukazov po določenem času

Oddelek: Programiranje
211320 (930) noraguta
»

Python - težava s slovarji - vnos

Oddelek: Programiranje
51200 (1022) RatedR
»

[Python]Naloga z razredi in dedovanjem

Oddelek: Programiranje
101066 (818) ktka
»

python -slovar

Oddelek: Programiranje
222995 (1974) Valex86

Več podobnih tem