AttributeError: 'str' - Objekt hat kein Attribut (Funktion)
Bin ich zu schreiben versucht, ein Objekt-orientiertes Programm, dass mir erlaubt, einzugeben und zu speichern monatliches Einkommen und Rechnungen, und alle Daten wie gewünscht. Ich kann erfolgreich speichern Sie ein Objekt, aber wenn ich versuche, mit meinem view_all-Funktion, bekomme ich diesen Fehler:
in view_all print(item.get_month())
AttributeError: 'str' - Objekt hat kein Attribut 'get_month'
Wenn Ihr mir helfen könntet, die Spur dieses problem wäre ich dankbar!
# Create a month class
class Month:
# Use __init__ method to initialize the attributes
def __init__(self, month, income, tds, pnm, zia, water):
self.__month = month
self.__income = income
self.__tds = tds
self.__pnm = pnm
self.__zia = zia
self.__water = water
# The set methods accept arguments:
def set_month(self, month):
self.__month = month
def set_income(self, income):
self.__income = income
def set_tds(self, tds):
self.__tds = tds
def set_pnm(self, pnm):
self.__pnm = pnm
def set_zia(self, zia):
self.__zia = zia
def set_water(self, water):
self.__water = water
# The get methods return the data:
def get_month(self):
return self.__month
def get_income(self):
return self.__income
def get_tds(self):
return self.__tds
def get_pnm(self):
return self.__pnm
def get_zia(self):
return self.__zia
def get_water(self):
return self.__water
# The __str__ method return's the object's state as a string
def __str__(self):
return "Month: " + self.__month + \
"\nIncome: " + self.__income + \
"\nTDS: " + self.__tds + \
"\nPNM: " + self.__PNM + \
"\nZia: " + self.__zia + \
"\nWater: " + self.__water
Und das Hauptprogramm:
import Month_Class
import pickle
ADD_MONTH = 1
VIEW_ALL = 2
QUIT = 3
FILENAME = 'ruidoso.dat'
def main():
months = load_months()
choice = 0
while choice != QUIT:
choice = get_menu_choice()
if choice == ADD_MONTH:
add_month(months)
elif choice == VIEW_ALL:
view_all(months)
save_months(months)
def load_months():
try:
input_file = open(FILENAME, 'rb')
months_dct = pickle.load(input_file)
input_file.close
except IOError:
month_dct = {}
return month_dct
def get_menu_choice():
print()
print('Menu')
print('------------------')
print("1. Add data for a new month")
print("2. View data for all months")
print('Any other number saves and quits the program!')
print()
choice = int(input('Enter your choice: '))
while choice < ADD_MONTH or choice > QUIT:
choice = int(input('Enter a valid choice: '))
return choice
def add_month(months):
month = input('Enter the name of the month: ')
income = input('Total income for this month: ')
tds = input('TDS Broadband bill total: ')
pnm = input('PNM bill total: ')
zia = input('Zia Natural Gas bill total: ')
water = input('City of Ruidoso bill total: ')
entry = Month_Class.Month(month, income, tds, pnm, zia, water)
if month not in months:
months[month] = entry
print('The entry has been added')
else:
print('That month already exists!')
def save_months(months):
output_file = open(FILENAME, 'wb')
pickle.dump(months, output_file)
output_file.close()
def view_all(months):
for item in months:
print(item.get_month())
print(item.get_income())
print(item.get_tds())
print(item.get_pnm())
print(item.get_zia())
print(item.get_water())
main()
- FYI: die Verwendung von Getter und setter in Python ist sehr ungewöhnlich.
- Dies war Teil von unserem lehrbuch. Ist es wirklich nicht oft benutzt?
- Nein, es ist nicht. Welchen Vorteil bekommt man in Python wenn Sie Getter und setter? Verwenden Sie einfach die Instanz-Attribut selbst. Wenn es etwas mehr Logik als nur die Einstellung für den Wert der Nutzung der
@property
Dekorators wird empfohlen. Check out diese Frage.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie Durchlaufen Wörterbuch anders
In der view_all - Methode, müssen Sie Durchlaufen Wörterbuch:
ist und Sie noch andere Fehler in __str__ Methode des Monats-Klasse:
die richtige ist: