【问题标题】:Issues accessing attributes of object appended to a list in Python在 Python 中访问附加到列表的对象属性的问题
【发布时间】:2021-04-05 04:51:57
【问题描述】:

我正在尝试创建一个房间检查应用程序,将失败的房间附加到一个列表中。

一旦创建的“房间”对象被附加到空的“失败房间”列表中,我遇到的问题就是访问属性。我所能做的就是返回对象在内存中的存储位置。

class UniRoom(object):
    def __init__(self, roomNumber, balcony, carpet, bedroom, room):
        self.roomNumber = roomNumber
        self.balcony = balcony
        self.carpet = carpet
        self.bedroom = bedroom
        self.room = room

    def printResult(self): #deleted because irrelevant to question.
        


failedRooms = []
print("---------- Globe Apartments Room Checker ----------")
rooms = [UniRoom(roomNumber=input("\nPlease enter the number of the room being graded: "),
                 balcony=input("Please enter the grade of the balcony: "),
                   carpet = input("Please enter the grade of the carpet: "),
                   bedroom = input("Please enter the grade of the bedroom: "),
                   room = input("Please enter the final grade of the room: ").upper()) for i in range(3)]

for r in rooms:
    r.printResult()
    if r.room == 'FAIL':
        print("This room has failed inspection")
        failedRooms.append(r)

print(failedRooms)

抱歉,如果我没有遵循发布格式。我是 stackoverflow 的新手,正在尝试制作我的第一个 Python 项目(相对较新的 Python 约 2 个月的经验,主要用于做理论)

不胜感激。谢谢!

【问题讨论】:

    标签: python list class attributes


    【解决方案1】:

    您正在尝试打印 failedRooms 数组,而不是数组中的 UniRoom 实例。您可以使用 [] 在 failedRooms 中指定特定的 UniRoom,如下所示:

    print(failedRooms[0])
    

    虽然它仍然只是一个对象的内存地址。要访问 UniRoom 中的属性,您可以执行类似的操作(稍微修改代码版本)。我正在遍历添加到 failedRooms 列表中的每个失败房间,并打印每个房间的详细信息:

    class UniRoom(object):
        def __init__(self, room_number, balcony, carpet, bedroom, room):
            self.room_number = room_number
            self.balcony = balcony
            self.carpet = carpet
            self.bedroom = bedroom
            self.room = room
    
        def print_result(self):  # deleted because irrelevant to question.
            print(self)
    
    
    failedRooms = []
    print("---------- Globe Apartments Room Checker ----------")
    rooms = [UniRoom(room_number=i,
                     balcony=90,
                     carpet=80,
                     bedroom=70,
                     room='FAIL') for i in range(3)]
    
    for r in rooms:
        r.print_result()
        if r.room == 'FAIL':
            print("This room has failed inspection")
            failedRooms.append(r)
    
    for failed_room in failedRooms:
        print('room_number: {}'.format(failed_room.room_number))
        print('balcony: {}'.format(failed_room.balcony))
        print('carpet: {}'.format(failed_room.carpet))
        print('bedroom: {}'.format(failed_room.bedroom))
        print('room: {}'.format(failed_room.room))
    

    【讨论】:

    • 太棒了!这种方法有效。谢谢!我应该尝试访问每个单独的属性是有道理的。下次就知道了。
    猜你喜欢
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-19
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2011-02-04
    相关资源
    最近更新 更多