python
  • class
  • object
  • 2016-11-28 2 views 0 likes 
    0

    Ich arbeite an einer Aufgabe für die Klasse und erhalte die folgenden Attribute:Attribute: ‚str‘ Objekt hat kein Attribut ‚_Animal__animal_available‘

    File "C:\Users\***\Desktop\Python\******PetStore\Animal.py", line 24, in get_available 
        self.__animal_available = 'available' 
    AttributeError: 'str' object has no attribute '_Animal__animal_available' 
    

    Die Zuordnung ist Programm zum Erstellen einer Zoohandlung zu simulieren. Das Programm muss Tier mit einem Namen erstellen, und ob es verfügbar ist. Wann auch immer, nachdem ich das Tier zur Verfügung gestellt habe, bekomme ich den Fehler oben. Hier ist ein Ausschnitt des Hauptprogramms.

    elif menu_input == '1': 
         type = input("What type of animal would you like to create? ") 
         name = input("What is the animal’s name? ") 
         available = input('Is the animal available for adoption y/n? ') 
         Animal.Animal.get_available(available, available) 
    

    Jetzt ist hier die Tier-Klasse, wo der Fehler ausgelöst wird.

    import random 
    
    class Animal: 
    
        def __init__(self, animal_type, animal_name, available): 
         self.__animal_name = animal_name 
         self.__animal_type = animal_type 
         self.set_mood() 
         self.get_available() 
    
        def get_animal_type(self): 
         return self.__animal_type 
    
        def get_name(self): 
         return self.__animal_name 
    
        def check_mood(self): 
         return self.__mood 
    
        def get_available(self, available): 
         if available != 'y': 
          self.__animal_available = 'not available' 
         else: 
          self.__animal_available = 'available' 
         return self.__animal_available 
    
        def set_mood(self): 
         random_number = random.randint(1,3) 
         if(1 == random_number): 
          self.__mood = "happy" 
         if(2 == random_number): 
          self.__mood = "hungry" 
         if(3 == random_number): 
          self.__mood = "sleepy" 
    
    +0

    Das ist keine Klasse, die eine Methode ist. Könnten Sie bitte die ** _ Klasse _ ** zeigen? –

    +0

    Erstens, teilen Sie den Inhalt der Klasse. Außerdem, warum hast du 'Animal.Animal' zweimal in deinem Code? –

    +0

    Die gesamte Klasse hinzugefügt. Ich habe Tier zweimal, weil ich ein AttributError sag get_available ist nicht definiert, wenn ich nur Animal.get_available (verfügbar) – UnMarkedTrailer

    Antwort

    2

    Sie müssen eine Instanz von Animal und rufen dann die get_available Methode auf dass erstellen. zB:

    animal_instance = Animal.Animal(type, name, available) 
    print(animal_instance.get_available()) 
    

    Natürlich können Sie dies tun, ohne die Zwischenvariable die Instanz zu halten:

    print(Animal.Animal(type, name, available).get_available()) 
    

    Was Sie tun, ist die Methode aufgerufen wird, als ob es sich um eine statische waren Methode. Da Sie available zweimal übergeben, setzen Sie im Wesentlichen self innerhalb der Methode auf available (was eine Zeichenfolge ist) und das erklärt den Fehler, den Sie sehen.

    +0

    Danke, das hat mein Problem behoben! – UnMarkedTrailer

    Verwandte Themen