如何修复未定义的'NameError''Person'

时间:2019-07-12 13:50:09

标签: python

每当我从Person类创建实例/对象时,我都会收到NameError

我创建了一个另存为Person.py的类 在终端上,我已经使用“ python -i”导入了所有内容 我输入了P1 = Person(“ name”,“ name”,20) 但是我遇到了以下错误

 python -i
Python 2.7.15+ (default, Nov 27 2018, 23:36:35) 
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.

>>> p1=Person("i","j",20)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'Person' is not defined

代码:

class Person:


    #constructor
    def __init__(self,first_name,last_name,age):
        self.first_name = first_name
        self.last_name = last_name
        self.age = age

    #set first_name
    def setFirst_name(self,first_name):
        self.first_name = first_name

    #get first_name
    def getFirst_name(self):
        return self.first_name

    #set last_name
    def setLast_name(self,last_name):
        self.last_name = last_name

    #get last_name
    def getLast_name(self):
        return self.last_name

    #set age
    def setAge(self,age):
        self.age = age

    #get age
    def getAge(self):
        return self.age

    #get full_name
    def getFull_name(self):
        return self.first_name + " " + self.last_name

    #get details
    def getDetails(self):
        details = {'First Name':self.first_name,'Last Name':self.last_name,'Age':self.age} 

我希望P1创建一个Person对象,以便在我调用函数'getDetails()'时应打印以下内容

名字:i姓氏:j年龄:20

2 个答案:

答案 0 :(得分:3)

您必须先导入本地文件,然后才能使用它-即使该文件位于同一目录中。这应该起作用:

>>> import Person

但是现在Person代表文件Person.py的内容。要真正进入Person类,您需要显式调用它:

>>> p1 = Person.Person("i", "j", 20)

您可以通过从文件 Person导入 class Person.py来解决此问题:

>>> from Persion import Person
>>> p1 = Person("i", "j", 20)

答案 1 :(得分:0)

因此,您只是在您编写的Person.py文件所在的工作目录中运行python shell吗?

这还不足以告诉Shell / Python您要使用该文件的内容。必须明确导入该shell实例中尚未定义的所有内容。 (大写正确)

如果您直接使用-i在shell上工作,则必须包含后面的参数。这些就是您想要的文件名,因此您的完整行将为python -i "Person.py"

但是如果将来您想使用脚本,那么这是不可能的,您需要在正在使用的“主”文件中指定 imports ,并要求其他要调用的文件。 例如

#import ModuleName
# in this case your "module" is the "Person.py" file so:
import Person

这将允许您使用正在使用的Shell /脚本中的“模块” /文件的内容。要使用该模块内部的Class,也称为“ Person” ”,则需要像Person.Person(args)

那样引用它

当然,看这些多余的文字会很烦人,因此我们可以通过这样具体地导入 该类来清理它:

#from Module import Class
from Person import Person
# now we can just use Person(args) without having to specify the Person module every time

为了以后的参考,我假设您正在学习类:

如果在单个模块/文件中有多个类,则说您添加了一个Animal类,那么您可以一个一个地导入它们,也可以一次用星号将它们全部导入,如下所示:

#either
from Person import Person, Animal
#or
from Person import *