在Python中导入类的问题

2024-06-25 07:06:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Python编写一个简单的程序,我想从一个文件中导入我在另一个类中创建的类。我的代码如下:

#file cPoint.py
import math
class Point:
    def __init__(self,x,y):
        self.x=x
        self.y=y

    def printC(self):
        print ("(",self.x,",",self.y,")")

我的另一个文件是:

#file pointTest
import cPoint

def main():
    p=Point(3,4)
    p.printC()

if __name__=="__main__":
    main()

问题是,当我从文件pointTest运行我的程序时,顺便说一下,它们都在同一个目录中,我得到了以下错误:

 File "E:\python\pointTest.py", line 15, in <module>
    main()

  File "E:\python\pointTest.py", line 11, in main
    p=Point(3,4)

NameError: name 'Point' is not defined

当我在同一个文件中测试我的程序时,它可以工作,并且当我使用以下命令从命令提示符调用该类时:

import cPoint

p=Point(3,4)

p.printC()
( 3 , 4 )

我错过了什么?我正在Anaconda中使用WinPython


Tags: 文件namepyimportself程序maindef
2条回答

您已经使用导入了文件cPoint.py

import cPoint

但是您不能像PointTest.py文件中的函数那样直接访问它的函数。同一文件中的函数可以仅通过其名称直接访问

BUT

无法直接访问另一个(导入)文件中的函数。相反,你应该写:

#file pointTest
import cPoint

def main():                  ##
    p=cPoint.Point(3,4)    #### Look at this line written here
    p.printC()               ##

if __name__=="__main__":
    main()

从其他文件调用函数或类时,必须指定在何处查找它们。您可以通过将包含它的文件名放在函数/类名前面来完成此操作,如:cPoint.Point。这告诉testPoint在cPoint中查找Point

另一个选项是将类直接导入testPoint,而不是整个文件。您可以通过将import语句替换为from cPoint import Point来实现这一点。这将允许您调用Point,而无需指定它在哪个文件中(您不需要使用cPoint.Point,只需调用Point

因为您没有指定Point的位置,testPoint只在自身中查找Point,而Point只存在于cPoint中,所以它找不到它,导致抛出错误。我希望这能回答你的问题!:)

相关问题 更多 >