【问题标题】:I'm getting Name error for my python class attributes我的 python 类属性出现名称错误
【发布时间】:2020-09-18 02:29:32
【问题描述】:

我刚开始学习 Python,我正在尝试类概念,遇到了这个错误,无法找出我做错了什么!有人能指出来吗?!

class animal:
    def __init__(self,name,ani,age,location):
        self.name= name
        self.ani = ani
        self.age = age
        self.location = location

    def info(self):
        print("I'm a {0} called {1} and I'm {2} years old, living in {3}".format(ani,name,age,location))


Arun = animal(Martin,Dog,7,Amazon)
Arun.info()

错误是:

Traceback (most recent call last):   File
"C:\Users\DELL\Desktop\python\class_trail.py", line 12, in <module>
Arun = animal(Martin,Dog,7,Amazon) NameError: name 'Martin' is not defined

【问题讨论】:

  • 您在字符串周围的变量名称和引号之前错过了self.
  • 哦,是的!哎呀。谢谢 !现在一切正常

标签: python class nameerror


【解决方案1】:

所以你的代码有几处出了问题:

  1. 您传入的是变量名,而不是字符串。

当您调用 Arun = animal(Martin,Dog,7,Amazon) 时,Python 会查找名为 Martin 的变量名,但找不到并引发 NameError

你可能想要的是Arun = animal('Martin','Dog',7,'Amazon')

  1. 您的 .info() 方法需要引用 self.ani 和 self.age 等,因为这些数据项绑定在对象内部。

【讨论】:

  • 谢谢你的时间!我仍在试图弄清楚在哪里使用 self 和在哪里不使用,这有点令人困惑!代码现在工作正常
  • @ArunPrakash 你的 init 方法以及你调用 info(self) 的事实应该会给你一个线索。
【解决方案2】:
Arun = animal(Martin,Dog,7,Amazon)

^ 你想在这里传递字符串值,但是你传递的是未定义的变量。要在那里传递字符串,您必须将它们包装成这样的引号:

Arun = animal("Martin","Dog",7,"Amazon")

【讨论】:

    【解决方案3】:

    您遇到的错误是指在您使用之前,代码中没有定义变量Martin。你可能打算做的是

    Arun = animal("Martin", "Dog", 7, "Amazon")
    

    注意您作为参数传递的字符串周围的引号,而不是 python 如何解释您的代码,这将在哪里起作用:

    name = "Martin"
    animal = "Dog"
    age = 7
    location = "Amazon"
    
    Arun = animal(name, animal, age, location)
    

    额外:在学习 Python 编码时,您可能想要习惯的一些东西是它的良好实践。 Python 类通常用大写字母(或实际上是 PascalCase)声明,如 class Animal():,而变量名通常声明为小写(snake_case),如 arun = Animal(...)

    有一个小例外:常量被声明为大写,就像EULER_CONSTANT = 0.577

    【讨论】:

    • 是的!感谢您的帮助,刚开始编程,因此出现了这些有趣的错误。
    • 是的,它是其中的一部分!查看我的最新编辑,它将帮助您遵循 Python 最佳实践并使与他人的协作更加顺畅。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-05
    • 1970-01-01
    • 2015-10-18
    • 2022-11-13
    • 1970-01-01
    • 1970-01-01
    • 2014-06-27
    相关资源
    最近更新 更多