2

我已经定义了 2 个类——Person 和 Manager。Manager 继承了 Person 类。尝试导入 Person 类时出现错误..

代码如下。

人物.py

class Person:
    def __init__(self, name, age, pay=0, job=None):
        self.name = name
        self.age  = age
        self.pay  = pay
        self.job  = job

    def lastname(self):
        return  self.name.split()[-1]

    def giveraise(self,percent):
        #return self.pay *= (1.0 + percent)
        self.pay *= (1.0 + percent)
        return self.pay

管理器.py

from Basics import Person

class Manager(Person):
    def giveRaise(self, percent, bonus=0.1):
        self.pay *= (1.0 + percent + bonus)        
        return self.pay

错误陈述:

C:\Python27\基础>Person.py

C:\Python27\Basics>Manager.py Traceback(最近一次调用最后一次):文件“C:\Python27\Basics\Manager.py”,第 1 行,从 Basics 导入 Person ImportError:没有名为 Basics 的模块

为什么我会收到 No module found 错误?

4

4 回答 4

6

您应该查看import 和 PYTHONPATH的工作方式。在您的情况下,您可以使用以下方法解决该问题:

from Person import Person

我看到您来自 Java 背景(每个文件必须有一个与文件同名的类),但这不是 Python 模块的工作方式。

简而言之,当您从命令行运行 Python 脚本时,它会在您的当前目录中查找模块(以及其他位置)。当您像以前一样导入(简单)名称时,Python 将查找:

  1. 一个名为Basic.py; 或者:
  2. 一个名为 Basic 的文件夹,其中包含一个名为__init__.py.

然后它将在该模块中查找名为Person.

于 2012-06-04T03:54:26.847 回答
3

因为它在Person.py,不是Basics.py

from Person import Person
于 2012-06-04T03:53:20.183 回答
3

Person在一个名为Person.py. 因此,您应该像这样导入它:

from Person import Person

请注意,Python 中的约定是使用小写的模块名称。例如,重命名Person.pyperson.py和。然后你会像这样导入类:Manager.pymanager.pyPerson

from person import Person

如果person模块是包的一部分,您可能希望像这样导入:

from .person import Person

这将简化向 Python 3 的过渡。

于 2012-06-04T03:53:23.820 回答
0

from Basics import Person应该是from Person import Person。您没有要从中导入的 Basics.py 模块。

于 2012-06-04T03:54:47.057 回答