You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python访问类中列表返回对象地址而非内容的解决方法

问题根因
  1. 你在格式化字符串时直接传入a_owner.pets,此时传入的是列表对象本身,输出的是列表的默认字符串表示(类似["大黄", "橘猫"]的格式),并非你预期的拼接好的可读内容。
  2. 你尝试的a_owner.pets.name是错误写法:pets是list类型的容器,本身不存在name属性,自然无法访问到预期内容,列表里存储的元素需要从容器内部取出后才能访问对应属性。
修复方法

根据你pets列表存储的内容类型,分两种场景处理:

  • 如果列表里直接存的是宠物名的字符串值,用字符串的join方法把列表元素拼接成连贯的字符串即可
  • 如果列表里存的是自定义的宠物类实例,需要先遍历列表取出每个实例,再访问实例的属性后拼接

场景1:pets存储字符串类型的宠物名

class Owner:
    def __init__(self, name):
        self.name = name
        self.pets = []


def get_pets_string(a_owner):
    # 空列表时做兜底处理,避免join报错
    pets_content = ", ".join(a_owner.pets) if a_owner.pets else "暂无登记宠物"
    result = "{0} {1}'s pets are: {2}.".format(a_owner.name.first, a_owner.name.last, pets_content)
    return result

场景2:pets存储自定义宠物类实例

假设你的宠物类结构如下,每个实例有name属性存储宠物名:

class Pet:
    def __init__(self, name, pet_type):
        self.name = name
        self.pet_type = pet_type

对应修改get_pets_string函数,遍历列表取出每个宠物实例的名称再拼接:

def get_pets_string(a_owner):
    # 列表推导式遍历所有宠物实例,取出name属性
    pet_name_list = [pet.name for pet in a_owner.pets]
    pets_content = ", ".join(pet_name_list) if pet_name_list else "暂无登记宠物"
    result = "{0} {1}'s pets are: {2}.".format(a_owner.name.first, a_owner.name.last, pets_content)
    return result

注意:列表是存储多个元素的容器,访问容器内的内容必须通过遍历、索引取值的方式先拿到单个元素,再对元素做属性访问或者值读取,不能直接对列表容器本身调用元素才有的属性。

内容的提问来源于stack exchange,提问作者gigilynne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 20:42:18