12

这似乎是一个愚蠢的问题,但我无法在任何地方找到答案。在我的各种包中,我有一组模块,通常每个模块都包含一个类。当我想创建一个类的实例时,我必须引用它两次:

示例:包/obj.py:

class obj(object):
    pass

文件.py:

import package.obj
my_obj = package.obj.obj()

有没有办法重新组织我的代码,这样我就不必输入两次名称了?理想情况下,我只想输入 package.obj()。

4

3 回答 3

13

Python 不是 Java。随意将许多类放到一个文件中,然后根据类别命名文件:

import mypackage.image

this_image = image.png(...)
that_image = image.jpeg(....)

如果您的类太大,您希望它们在单独的文件中以减轻维护负担,那很好,但是您不应该给您的用户(或您自己,如果您使用自己的包;)造成额外的痛苦。将您的公共类收集在包的__init__文件(或类别文件,例如image)中,以呈现一个相当平坦的命名空间:

mypackage 的__init__.py(或image.py):

from _jpeg import jpeg
from _png import png

我的包裹_jpeg.py

class jpeg(...):
    ...

我的包裹_png.py

class png(...):
    ...

用户代码:

# if gathered in __init__
import mypackage
this_image = mypackage.png(...)
that_image = mypackage.jpeg(...)

或者:

# if gathered in image.py
from mypackage import image
this_image = image.png(...)
that_image = image.jpeg(....)
于 2013-09-25T17:03:16.513 回答
6

您可以使用from ... import ...声明:

from package.obj import obj
my_obj = obj()
于 2013-09-25T17:00:54.900 回答
1

给你的类和模块起有意义的名字。就是那样。将您的模块命名为“类”并将您的类命名为“MyClass”。

from package.classes import MyClass

myobj = MyClass()
于 2013-09-25T17:01:09.523 回答