2016-11-20 1 views
0

Dies ist nur ein Beispiel von Noten (Python Objekte Basics)Bedingte Anweisung Python

class Cow(): 

    noise = 'moo!' 

    def __init__(self, color): 
    self.color = color 
    print "This cow is " + self.color 

    def make_noise(self): 
    print self.noise 

    def set_color(self, new_color): 
    self.color = new_color 

    def get_color(self): 
    return self.color 

    def __cmp__(self, other): 
    if self.color == other.color: 
     return True 
    else: 
     return False 

    def __str__(self): 
    return self.color + ' ' + self._noise 

blue_cow = Cow('blue') 
red_cow = Cow('red') 

blue_cow.make_noise() 

print red_cow == blue_cow 

blue_cow.set_color('red') 
print red_cow == blue_cow 

Dies ist der Ausgang nach dem Laufen:

moo! 
True 
False 

Was habe ich nicht verstanden, warum ist (3 Zeile aus letzte)

print red_cow == blue_cow 

Wahr geben, während es false (meiner Ansicht nach geben), da red_cow hat rote Farbe und blue_cow hat blaue annehmen ist Farbe

Und die letzte Zeile zwei Zeilen

blue_cow.set_color('red') 
print red_cow == blue_cow 

Und die letzte Zeile, warum es meiner Meinung nach auf False während ausführt ich es erwarten __cmp__ auf True auszuführen

+0

Verwenden Sie '__eq__' anstelle von' __cmp__'. – Fejs

Antwort

0

Sie möchten __eq__ verwenden, oder Sie können Ihre Methode ändern, um die Zeichenfolgen tatsächlich zu vergleichen, indem Sie cmp() verwenden.

def __cmp__(self, other): 
    return cmp(self.color, other.color) 

Damit können alle anderen Vergleichsoperationen ausgeführt werden.

print red_cow == blue_cow # False 
print blue_cow < red_cow # True 
print sorted([red_cow, blue_cow]) # [blue moo!, red moo!] 

blue_cow.color = 'red' 
print red_cow == blue_cow # True 
1

sind Sie verwenden, versuchen Sie es mit __eq__ und es wird funktionieren (getestet).

0

https://docs.python.org/2/reference/datamodel.html#object.cmp

durch Vergleichsoperationen aufgerufen, wenn die reiche Vergleich (siehe oben) ist nicht definiert. Sollte Rückkehr eine negative ganze Zahl wenn selbst < andere, Null wenn self = andere, eine positive ganze Zahl wenn self> andere. Wenn kein cmp(), eq() oder ne() Operation definiert ist,

Wenn Sie __cmp__ ändern 0, wenn gleich zurückzukehren, und nicht Null, wenn nicht gleich es auch funktioniert . Auf Python 2.7.X