2016-11-30 5 views
-1

Ich versuche, eine Klasse zu erstellen, die Objekte mit verschiedenen Methoden basierend auf einer Eingabe erstellen wird. Der Sinn dahinter ist, bei jedem Aufruf der Methode die Verwendung einer if-Anweisung zu vermeiden.defining Methode der Klasse in if-Anweisung

Unten ist der Code, dachte ich würde funktionieren, aber funktioniert nicht.

class Food: 
    def __init__(self,food_type): 
     self.food_type = food_type 

     if food_type == 'cookie': 
      print 'this is a cookie' 
      def is_awesome(self): 
       print "is awesome" 
     else: 
      print 'this is not a cookie' 
      def is_awesome(self): 
       print "not awesome" 

Oreo = Food('cookie') 
Oreo.is_awesome() 

Der Code funktioniert nicht Fehler auf der def is_awesome(self) Aussage, sondern die Oreo.is_awesome() Linie wirft den Fehler:

„Attribute: Essen Instanz hat kein Attribut is_awesome“.

Gibt es eine bessere Möglichkeit, Objekte mit unterschiedlichen Methoden zu erstellen? und gibt es einen Grund, warum die Methode is_awesome nicht von 'Oreo.is_awesome' aufrufbar ist?

+0

Im '' __init__, könnten Sie tun, nur 'self.is_awesome = food_type == "Cookie"'. Das heißt, wenn Sie einen booleschen Wert wünschen, keine Zeichenfolge –

Antwort

0

Gibt es eine bessere Möglichkeit, Objekte mit verschiedenen Methoden zu erstellen?

Ja ein Weg, der funktioniert :) Polymorphismus ist ein großer Kandidat.

class Food: 
    def is_awesome(self): 
    print 'not awesome' 

class Cookie(Food): 
    def is_awesome(self): 
    print 'is awesome' 

und gibt es einen Grund, warum die Methode is_awesome nicht aufrufbar ist von ‚Oreo.is_awesome‘?

Ja, es ist nicht auf die Instanz gebunden (konventionell self genannt) in jedem

0

Sie haben die Methode/Funktion is_awesome(self) und dann if's Inneren

class Food: 
    def __init__(self,food_type): 
     self.food_type = food_type 

    def is_awesome(self): 
     if self.food_type == 'cookie': 
      print 'this is a cookie' 
      print "is awesome" 
     else: 
      print 'this is not a cookie not awesome' 
      print "not awesome" 


Oreo = Food('cookie') 
Oreo.is_awesome() 

Das funktioniert, getestet zu definieren!

+0

Sorry, ich habe dies nicht angegeben, aber ich bin mir bewusst, dass dieser Weg funktioniert, aber ich versuche, einen Weg zu finden, eine If-Anweisung jedes Mal zu durchlaufen Ruf 'is_awesome' –

Verwandte Themen