首先我需要描述一下要做的这件事情。假定我们有2个类,分别为Person类、Stu类,我们要将这2个类分装成一个包,就是这么简单,那么废话不多说,让我们操作起来。
- 第1步.建立一个Package,命名为Demo1
右击项目名->new->Python Package
- 第2步.在Demo1包下创建Person类
class Person:
def __init__(self,name,gender):
self.name = name
self.gender = gender
def printinfo(self):
print(self.name,self.gender)
- 第3步.在Demo1包下创建Stu类
class Stu():
def __init__(self,name,gender,stuid):
self.name = name
self.gender = gender
self.stuid = stuid
def printinfo(self):
print(self.name,self.gender,self.stuid)
完成上述步骤之后,目录结构应该如下图所示:
- 第3步.如果你使用的IDE是PyCharm,那么当你建立一个Package时,在这个包下会自动生成一个__init__.py文件。如果没有使用PyCharm,那么需要你在Package下自行创建__init__.py文件。当一个文件夹下有__init__.py文件时,Python认为这个文件夹是一个包,__init__.py可以为空,也可以写入一些语句。这里我们写入一些语句,该语句分别从Person和Stu两个模块(modules)里导入Person类和Stu类,也就是说一旦我们导入Person和Stu这两个模块,__init__.py会自动帮我们导入Person类和Stu类,从而我们可以直接使用这两个类。
- 写法1
from .Person import Person from .Stu import Stu
- 写法2
from Demo1.Person import Person from Demo1.Stu import Stu
到此,一个Python的Package就创建好了!
- 第4步.测试,在Demo1下创建test.py文件
from Demo1.Person import Person
from Demo1.Stu import Stu
if __name__ == '__main__':
p = Person('djk','man')
s = Stu('djk','man','nwnu')
p.printinfo()
s.printinfo()
Note!!!!!!!!!!:
在__init__.py文件中,我们可以使用以下这种写法:
from .Person import Person
from .Stu import Stu
这不会报错;但是如果在测试文件或不是在__init__.py文件中用这种写法,那么就会报错。假如我在test.py测试文件中用以上这种写法,就会报以下的错误:
要想避免这种错误,那么就不要偷懒了,导入包或者模块的时候都用绝对路径,尽量不用相对路径!!