如何在课堂上构建一个包

时间:2016-03-17 15:38:27

标签: python class constructor packages

我写了一个名为editClass的类,它运行正常。该类完全在editClass.py文件中定义。构造函数由:

给出
def __init__(self,filename):
    self.File=filename

我现在想要构建一个只包含此类的包。在未来当然还有其他课程...我花了一些时间在谷歌和这里搜索究竟是如何工作但我已达到某种死胡同。到目前为止我所拥有的是以下文件

setup.py
edit/__init__.py
edit/editClass.py

editClass中的类定义保持不变并且有效。 init只包含:     来自editClass导入editClass 并且设置

from setuptools import setup

setup(name='edit',
     version='0.1.0',
     packages=['edit'],
     author='my name'
     )

我在shell中安装了$ python setup.py install。这似乎有效。在测试文件test.py中,我想调用editClass的构造函数。但是

import edit
filename= "name.txt"
test=edit.editClass(filename)

不起作用。错误按摩是:

AttributeError:'module'对象没有属性'editClass'

我不知道我是否提到了构造函数worngle,或者问题是否已经在已安装的软件包中。说实话,我甚至不知道如何检查。

编辑:自从     从编辑导入editClass 也不起作用,我相信问题在于包的定义。

1 个答案:

答案 0 :(得分:0)

鉴于您的代码结构,您需要更改

import edit
filename= "name.txt"
test=edit.editClass(filename)

import edit.editClass
filename = "name.txt"
test = edit.editClass.editClass(filename)

你实际得到的是一个名为edit的包,其中包含一个名为editClass的模块,其中包含一个名为editClass的类。因此,您的导入需要导入模块(edit.editClass),然后您需要使用它的模块名称限定该类。或者你可以做

from edit.editClass import editClass
filename = "name.txt"
test = editClass(filename)

另一方面,如果您尝试实现的目的是让您的客户端代码看起来像那样,那么您需要将editClass类定义放入名为edit.py的文件中。