避免在python中双重输入类名

时间:2013-09-25 16:59:17

标签: python

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

实施例: 包/ obj.py:

class obj(object):
    pass

file.py:

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

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

3 个答案:

答案 0 :(得分:9)

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

mypackage的_jpeg.py

class jpeg(...):
    ...

mypackage的_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(....)

答案 1 :(得分:5)

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

from package.obj import obj
my_obj = obj()

答案 2 :(得分:1)

为您的类和模块提供有意义的名称。就是那样。将模块命名为“类”,并将类命名为“MyClass”。

from package.classes import MyClass

myobj = MyClass()