Here is the method causing the error:
class Kilpailu():
def __init__(self, nimi, pituuskm, osallistujat):
self.nimi = nimi
self.pituuskm = pituuskm
self.osallistujat = osallistujat
def kilpailu_ohi(self):
for i in self.osallistujat:
if (i.getKuljettuMatka>=self.pituuskm):
return True
else:
return False
edit: here is also where getKuljettuMatka is defined
class Auto:
def __init__(self, rekisteritunnus, huippunopeus):
self.rekisteritunnus = rekisteritunnus
self.huippunopeus=huippunopeus
self.nopeus=0
self.KuljettuMatka=0
def getKuljettuMatka(self):
return int(self.KuljettuMatka)
I am trying to call the method that just returns a boolean value and print whether the value is true or false.
class main():
autot = []
for i in range(10):
auto = Auto("ABC-" str(i 1), random.randint(100, 200))
autot.append(auto)
k = Kilpailu("Suuri romuralli", 8000, autot)
tunnit = 0
print(k.kilpailu_ohi()) #Should return true/false, instead throws an error
and here is the actual console output for the error
Traceback (most recent call last):
File "/root/PycharmProjects/ohjelmisto1/Harjoitustehtävät/Assosisaatio/autoKilpailu.py", line 51, in <module>
class main():
File "/root/PycharmProjects/ohjelmisto1/Harjoitustehtävät/Assosisaatio/autoKilpailu.py", line 59, in main
print(k.kilpailu_ohi())
File "/root/PycharmProjects/ohjelmisto1/Harjoitustehtävät/Assosisaatio/autoKilpailu.py", line 45, in kilpailu_ohi
if (i.getKuljettuMatka>=self.pituuskm):
TypeError: '>=' not supported between instances of 'method' and 'int'
I have tried changing stuff in the method like variable names in case i was accidentally overwriting something but it didnt work either
CodePudding user response:
def getKuljettuMatka(self): defines .getKuljettuMatka on instances of Auto as a method (that happens to return an integer). You can call the method with i.getKuljettuMatka() (note the parentheses), but what you're doing is comparing the method itself to self.pituuskm, which is an integer, and that doesn't work.
Instead:
def kilpailu_ohi(self):
for i in self.osallistujat:
if (i.getKuljettuMatka() >= self.pituuskm):
return True
else:
return False
By the way, I think the code is a bit roundabout in other ways, but this is you main issue right now.
