Nie działajaca funkcja __str__

0

powie mi ktoś czemu funkcja str(objekt) mi nie działa, oraz mój switch?

import sys

class Pet():
    
    def __init__(self, name):
        print("Tworzę " + name)
        self.name = name
        self.hunger = 0
        self.tiredness = 0
        self.main()
        
    def __del__(self):
        print("googbye")
        
    def play(self, fun = 4):
        self.tiredness -= fun;
        self.__passage_of_time()
        
    def __passage_of_time(self):
        self.hunger += 1
        self.tiredness += 1
        
    def eat(self, food = 4):
        self.hunger -= food
        self.__passage_of_time()

    def angry_pet(self):
        self.tiredness += 5
        
    def talk(self):
        mood = self.hunger + self.tiredness
        if(mood < 5):
            print("I'm happy")
        elif(mood >= 5 and mood < 10):
            print("It's okay")
        elif(mood >= 10 and mood < 15):
            print("I'm nervous")
        elif(mood >= 15):
            print("I'm angryy")
        self.__passage_of_time()
        
    def  __str__(self):
        return 'Name:{}\nHunger:{}\nTiredness:{}\n'.format(self.name, self.hunger, self.tiredness)
    
    def switch(self, argument):
        switcher = {
            1: self.play,
            2: self.eat,
            3: self.talk,
            0: self.__del__,
            'xy': self.__str__
        }.get(argument, 3)  
  
    def main(self):
        choice = 1
        while(choice):
            print('1.play with pet')
            print('2.feed pet')
            print('3.talk with pet')
            print('0.end')
            choice = input('Your choice:')
            if(choice == 1):
                how_much = input('How long:')
                for i in range(0, how_much + 1):
                    self.switch(choice)
            else:
                self.switch(choice)

        
        print()
        
obj = Pet("Oskar")
str(Pet)

0

Sprobuj nadpisac magiczna metode repr(self).

@Edit, moj post bez sensu, @anonimowy ma racje

1

Wywołujesz ją na obiekcie klasy a nie instancji.

0
bartek164 napisał(a):

powie mi ktoś czemu funkcja str(objekt) mi nie działa, oraz mój switch?

Switcher nie działa dlatego, że tak naprawdę nie wywołujesz metod tym .get(argument, 3), a powienieneś, ponieważ w słowniku zapisałeś jedynie referencje do tych metod. Zatem metoda get powinna wyglądać tak: .get(argument, 3)()

0

Tworzysz obiekt o nazwie obj, który ma na imię Oskar. Ok masz taki obiekt i jest on przypisany do zmiennej obj. Teraz z tego obiektu chcesz wyświetlić informacje więc na tym obiekcie musisz użyć funkcji str. str(obj) Aktualnie robisz to na innym obiekcie (inną zmienną używasz).

0

Powie mi ktoś dlaczego to nie działa, bo mnie zaraz szlak trafi,
żadna metoa się nie wywyłuje

 def main(self):
        choice = 1
        while(choice):
            print('1.play with pet')
            print('2.feed pet')
            print('3.talk with pet')
            print('0.end')
            choice = input('Your choice:')
            if(choice == 1):
                fun = input('How fun:')
                how_much = input('How long:')
                for i in range(0, how_much):
                    self.play(fun)
            if(choice == 2):
                food = input('How much food:')
                self.eat(food)
            if(choice == 3):
                self.talk()
            if(choice == 0):
                self.__del__()
            else:
                str(self)
                
0

Nie umieściłeś całego kodu tylko fragment. Na podstawie tego tylko tego fragmentu można stwierdzić, że masz funkcje, której nigdzie nie używasz dlatego się nie wykonuje.

0

Nauka.7z
daje cały kod

0

p.jpg wtf?

0

Mieszasz tutaj różne rzeczy ale z drugiej strony to tak zakładałbyś 10 tematów ze względu na braki elementarnej wiedzy... Każdy wprowadzony tekst przez użytkownika jest tekstem. Jeśli chcesz żeby był liczbą musisz go przekonwertować za pomocą int. W realnych zastosowaniach trzeba sprawdzić czy tekst wprowadzony przez użytkownika jest rzeczywiście liczbą bo inaczej dostaniesz błąd.

0

Korzystasz z Python3 (słusznie). W Pythonie3 nie ma już raw_input. input działa jak raw_input w Pythonie2.

0

no i tu był właśnie problem, właśnie go zauważyłem

1 użytkowników online, w tym zalogowanych: 0, gości: 1