python - 属性错误: 'str' object has no attribute (function)

标签 python object

我正在尝试编写一个面向对象的程序,该程序允许我输入和存储每月收入和账单,并根据需要查看所有数据。我可以成功存储对象,但是当我尝试使用 view_all 函数时,出现此错误:

在view_all中打印(item.get_month()) AttributeError:“str”对象没有属性“get_month”

如果您能帮我解决这个问题,我将不胜感激!

# 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

主程序:

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()        

最佳答案

您需要以不同的方式迭代字典

for month, item in months.items():
    print(item.get_month())
    ... 

关于python - 属性错误: 'str' object has no attribute (function),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37128641/

相关文章:

根据输入参数模拟掷骰子的Python函数 1) 骰子数量 2) 掷骰子数量

python - 类型错误 : 'int' object is not callable in loss. 向后()

python - 带有 datashader 的 map 背景 - "Map data not yet available"

java - 与 PriorityQueue 连续。比较时如何对对象+1?

python - 如何比较对象列表中的匹配值?

javascript - 从对象中分离键和值

python - 在 Tkinter TreeView 中插入数据以更正列时面临问题

python - Django 不会以奇怪的错误 "AttributeError: ' 模块开始'对象没有属性 'getargspec'“

javascript - 对象比较报告

c# - 对象模型,正确或最直观的方式