这似乎是一个愚蠢的问题,但我无法在任何地方遇到答案。在我的各种包中,我有一组模块,通常每个包含一个类。当我想创建一个类的实例时,我必须引用它两次:
实施例: 包/ obj.py:
class obj(object):
pass
file.py:
import package.obj
my_obj = package.obj.obj()
有没有办法重新组织我的代码,这样我就不必输入两次名字了?理想情况下,我只想输入package.obj()。
答案 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()