Python类定义——导入语句

Python类定义——导入语句,python,Python,我定义了两个类-Person和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(s

我定义了两个类-Person和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\Basics>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
C:\Python27\Basics>Manager.py 回溯(最近一次呼叫最后一次): 文件“C:\Python27\Basics\Manager.py”,第1行,在 从基本进口人 ImportError:没有名为Basics的模块


为什么会出现“未找到模块”错误?

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

from Person import Person

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

from Person import Person
from person import Person
from .person import Person
请注意,Python中的惯例是使用小写模块名。例如,将
Person.py
重命名为
Person.py
,将
Manager.py
重命名为
Manager.py
。然后导入
Person
类,如下所示:

from Person import Person
from person import Person
from .person import Person
如果
person
模块是一个包的一部分,您可能希望这样导入:

from Person import Person
from person import Person
from .person import Person
这将简化到Python 3的转换。

您应该查看如何工作。在您的情况下,您可以使用以下方法解决此问题:

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

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

  • 名为
    Basic.py
    的文件;或:
  • 名为Basic的文件夹,其中包含名为
    \uuuu init\uuuu.py
    的文件

  • 然后,它将在名为
    Person
    的模块中查找定义,该定义应为
    from-Basics-import-Person
    。您没有可从中导入的Basics.py模块