Ich habe den Code:Methoden im interaktiven Modus der Konsole außer Kraft setzen?
class Product:
def __init__(self,name, price,discount):
self.name = name
self.price = price
self.discount = discount
def get_discount_amout(self):
return self.price * self.discount
ich den Code zu IPython Konsole kopiert und eine Instanz erstellen:
In [2]: book = Product('Think Python', 12.99, 30)
Berechnen Sie den Rabattbetrag
In [5]: book.get_discount_amout()
Out[5]: 389.7
ich die Rechtschreibfehler zu finden und arithmetischer Fehler, um sie sofort in der Konsole zu korrigieren. Zuerst definiere ich eine korrekte get_discount_amount
Funktion.
def get_discount_amount_correct(self):
return self.price * self.discount/100
Zweite book
bisherige Methode zu überschreiben.
book.get_discount_amount = get_discount_amount_correct
Testen Sie es.
In [13]: book.get_discount_amount
Out[13]: <function __main__.get_discount_amount_correct>
Fantastischen ... dann
In [14]: book.get_discount_amount()
TypeError: get_discount_amount_correct() missing 1 required positional argument: 'self'
Versuch,
In [15]: book.get_discount_amount(self)
NameError: name 'self' is not defined
alternativ versuchen lambda:
In [16]: book.get_discount_amount = lambda self: self.price * self.discount/100
TypeError: <lambda>() missing 1 required positional argument: 'self'
In-Konsole können die Objektattribute leicht überschrieben werden, Wie zu o seine Methoden schreiben?
Sie müssen die korrigierten Methode zur Klasse ('-Produkt mit), nicht die Instanz hinzufügen ('Buch'). – jasonharper
Es kann in script_mode.errors Berichte in der Konsole geändert werden, 'Product.get_discount_amount = get_discount_amount_correct',' In [26]: Product.get_discount_amount Out [26]: '@jasonharper –