【问题标题】:Getting an AttributeError in python3在 python3 中获取 AttributeError
【发布时间】:2020-07-13 21:49:44
【问题描述】:

所以,我是这个编程方面的新手,我一直在做一些小项目来尝试巩固我所学的知识。我有我一直在制作的这个患者数据库 UI,它正在使用字典。我现在学会了使用类来代替,因此我可以将更多的数据包含到一个键中,而不仅仅是一个变量,但是当尝试引用一个属性进行输出时,它给了我属性错误..它几乎与我之前使用的代码相同,但带有 .包括年龄.. 任何人都可以帮助我并解释为什么我不能使用我以前在字典中使用的“请求”行,也许可以建议一种解决方法? error code image

class Patient:
    def __init__(patient, color, age):
        patient.color = color
        patient.age = age

felix = Patient ("White_British", 21)
print(felix.color)

while True:
    print ("What would you like to do?")
    
    usin = str(input("  "))
    
# Find Patient Age Function
    
    if usin == "find patient age":
        try: 
            request = str(input("Name of patient: "))
            print (request + "'s age is " + request.age + " Years"

任何帮助将不胜感激,我知道这似乎是一个愚蠢的问题。

【问题讨论】:

  • 所以意图是您向程序提供 text felix,然后程序相应地继续使用 variable @987654325 @?如果输入不是现有变量,您希望发生什么?如果其他变量不是 Patient,您希望发生什么?
  • 目的是输出 request =input 的输入年龄。
  • 所以目前它只是一个短代码,因为我使用了一个完全不同的字典,并让它与 request[age] 一起工作,因为这对字典来说是正确的。现在我正在尝试使用类因为我可以输入更多属性。我对不是字典中的键的输入进行了一些异常处理,提示输入正确的键并且有一个块来列出所有(键)患者..

标签: python python-3.x class attributeerror


【解决方案1】:

request 不是Patient 类的实例。您已使用input() 检索用户输入,使用str() 将其转换为字符串,并将request 设置为等于结果。所以request 没有age 属性,因为它是一个字符串而不是Patient

【讨论】:

  • 是的,我刚刚注意到它作为 str(input()) 在那里,所以我将 str 更改为 Patient 并且无济于事.. 我最终会弄清楚该怎么做,希望?
  • 您已将Patient 定义为需要colorage 输入。简单地将str 替换为Patient 只会给你一个错误。我认为您对 Python 对象的工作方式有一些误解,我建议您阅读一下如何在 Python 中定义和使用类。
  • input() 的结果是一个字符串。做str(input())没有用;执行Patient(input()) 尝试创建一个新患者 将该字符串传递给__init__。因此,您会收到一条不同的错误消息,因为 Patient 并非旨在以这种方式构造。
  • 祝你好运,你会成功的 :)
  • 因为我看到您是新用户:如果您找到满意的答案,“接受”它被认为是礼貌的。让人们有动力继续回答:)
【解决方案2】:

我重新格式化了一下,但这是我得到的!这对我来说运行良好。如果你喜欢它并且它适合你,请随时接受和编辑它。

class Patient:
    def __init__(self, name, color, age):
        self.name = name
        self.color = color
        self.age = age


felix = Patient('Felix', 'White British', 21)

verified_action = False

while not verified_action:
    user_in = input('What would you like to do?\n').lower()
    if user_in == "find patient age":
        verified_action = True
    else:
        print(f'{user_in} is not a valid input, please try again.')

picked_patient = False

while not picked_patient:
    request = input("Name of patient: ").lower()
    if request == 'felix':
        name = felix.name
        age = felix.age
        color = felix.color
        picked_patient = True
    else:
        print(f'{request} not recognized, please try again.')

print(f"{name}'s age is {age} years.")

您可以在继续添加患者时继续添加 elif 语句,只需将它们各自的变量设置为:

name = timothy.name
# etc.

但是,随着时间的推移,这会变得很麻烦,因此也许将这些数据存储在 Pandas DataFrame 之类的东西中,然后访问该 DataFrame 以获取信息会快得多。医院或任何使用此应用程序的人会发现不仅检索大量信息更容易,而且添加信息也非常容易,无需编写额外的代码。

我希望这会有所帮助! ??

【讨论】:

    猜你喜欢
    • 2020-04-19
    • 1970-01-01
    • 2022-12-11
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 2022-10-17
    相关资源
    最近更新 更多