Terveppä taas. Tällä kertaa kyselisin hieman taas olioista ja niiden toimimattomuudesta.
Elikkäs jos minulla on kaks oliota, nimetään ne vaikka sanoilla Yksi ja Kaksi. Koodi, jossa oliot luodaan on tämän näköinen:
class Yksi(): def TeeJotain(self): kaksi.TeeJotain() class Kaksi(): def TeeJotain(self): yksi.TeeJotain() def main(): #Alustaminen yksi = Yksi() kaksi = Kaksi() #Kutsutaan funktioita yksi.TeeJotain() if __name__ == '__main__': main()
Tätä koodia käytettäessä saan vain virheilmoituksen:
NameError: global name 'kaksi' is not defined
Mutta, jos muutan koodia niin, että olioita ei luoda main()-funktion sisällä vaan ulkopuolella koodia, esim. siinä missä nyt kutsutaan main()-funktiota, niin koodi toimii mainiosti (tai tässä tapauksessa ohjelma ei varsinaisesti toimi oikein vaan se kutsuu loputtomasti ristikkäisiä funktioita :D).
Viitsisikö joku vaivautua kertomaan minulle mikä main()-funktion sisällä kutsumisessa mättää ja kenties jonkinnäköistä ratkaisua.
Kyseiset muuttujat ovat voimassa vain funktion sisällä. Saat ne toimimaan määrittelemällä ne globaaliksi, tätä ei kuitenkaan useasti suositella.
def main(): global yksi, kaksi #Alustaminen yksi = Yksi() kaksi = Kaksi() #Kutsutaan funktioita yksi.TeeJotain()
Kiitos nopeasta vastauksesta. Tarkoittaako tämä käytännössä sitä, että minun olisi suoritettava main()-funktion tapahtumat vain muualla kuin siellä?
Isopaha kirjoitti:
Kiitos nopeasta vastauksesta. Tarkoittaako tämä käytännössä sitä, että minun olisi suoritettava main()-funktion tapahtumat vain muualla kuin siellä?
Itse tekisin niin, ellei jotakin erityistä syytä ole niitä tuohon main-funktioon laittaa.
Lähinnä järjestelyn vuoksi nuo oli tuolla main:issa, mutta eipä se ole suuri vaiva siirtää niitä pois. Kiitos, asia on tällä selvä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.