Python类定义 - import语句

时间:2012-06-04 03:49:46

标签: python

我已经定义了两个类 - 人和&经理。 Manager继承Person类。 我在尝试导入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

Manager.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 \基础> Manager.py Traceback(最近一次调用最后一次):   文件“C:\ Python27 \ Basics \ Manager.py”,第1行,in     来自Basics import Person ImportError:没有名为Basics的模块

为什么我发现No module found错误?

4 个答案:

答案 0 :(得分:6)

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

from Person import Person

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

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

  1. 名为Basic.py的文件;或者:
  2. 名为Basic的文件夹,其文件名为__init__.py
  3. 然后它会在名为Person的模块中查找定义。

答案 1 :(得分:3)

因为它位于Person.py,而不是Basics.py

from Person import Person

答案 2 :(得分:3)

您在名为Person的文件中定义了Person.py类。因此,您应该像这样导入它:

from Person import Person

请注意,Python中的常规是具有小写模块名称。例如,将Person.py重命名为person.py,将Manager.py重命名为manager.py。然后你就像这样导入Person类:

from person import Person

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

from .person import Person

这将简化向Python 3的过渡。

答案 3 :(得分:0)

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