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

如何用if语句添加对象?解决车辆添加的AttributeError报错

问题解决:车辆管理方法的错误修正

让我来帮你分析并解决这个问题,你的代码里存在几个逻辑错误和参数问题,我们一步步拆解并修正:

首先看报错原因

你遇到的 AttributeError: 'str' object has no attribute 'nome' 是因为调用add_viatura方法时传入了字符串,而不是Viatura类的实例。除此之外,你的两个方法还有其他逻辑问题,我们一起修复。

1. 修复exists_viatura方法的逻辑错误

原来的方法会在第一个不匹配的车辆就打印提示,这不符合需求——应该是遍历完所有车辆都没找到时才提示不存在。修正后的代码:

def exists_viatura(self, nome):
    for v in self.gestor:
        if v.nome == nome:
            return True
    # 遍历完所有车辆都没找到,才打印提示并返回False
    print("Não existe nenhuma viatura")
    return False

2. 修复add_viatura方法的多重问题

原来的方法存在循环内重复创建实例、错误调用外部对象方法、验证逻辑顺序错误等问题,修正后的代码:

def add_viatura(self, new_v):
    # 先校验传入参数是否为Viatura实例,从源头避免类型错误
    if not isinstance(new_v, Viatura):
        print("Erro: O parâmetro deve ser uma instância de Viatura")
        return
    
    # 调用当前Gestor实例的exists_viatura方法,检查是否重名
    if self.exists_viatura(new_v.nome):
        print("Já existe uma viatura com esse nome")
        return
    
    # 确认无重复后,添加到管理列表
    self.gestor.append(new_v)

3. 正确的调用方式

确保调用add_viatura时传入的是Viatura对象,而不是字符串:

# 创建一个Viatura实例
nova_viatura = Viatura("E-Bike Pro", "Modelo 2024", True, 1200.0)
# 创建Gestor实例
meu_gestor = Gestor()
# 添加车辆(传入Viatura对象)
meu_gestor.add_viatura(nova_viatura)

关键修正点总结

  • 参数校验:新增isinstance检查,避免传入非Viatura类型的参数,彻底解决你遇到的AttributeError。
  • exists_viatura逻辑优化:把提示信息和返回False的逻辑移到循环外,确保只有完全找不到匹配车辆时才提示。
  • 移除冗余代码:删除循环内重复创建new_v实例的无用代码,直接使用传入的对象。
  • 修正方法调用:把g.exists_viatura改为self.exists_viatura,确保调用当前实例的方法,而不是未定义的外部对象。

这样修改后,你的方法就能正确验证车辆是否存在,避免重复添加,同时解决了报错问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:34:27