避免在python中双重输入类名

sfp*_*ano 10 python

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

示例:package/obj.py:

class obj(object):
    pass
Run Code Online (Sandbox Code Playgroud)

file.py:

import package.obj
my_obj = package.obj.obj()
Run Code Online (Sandbox Code Playgroud)

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

Eth*_*man 10

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

import mypackage.image

this_image = image.png(...)
that_image = image.jpeg(....)
Run Code Online (Sandbox Code Playgroud)

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

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

from _jpeg import jpeg
from _png import png
Run Code Online (Sandbox Code Playgroud)

mypackage的_jpeg.py:

class jpeg(...):
    ...
Run Code Online (Sandbox Code Playgroud)

mypackage的_png.py:

class png(...):
    ...
Run Code Online (Sandbox Code Playgroud)

用户代码:

# if gathered in __init__
import mypackage
this_image = mypackage.png(...)
that_image = mypackage.jpeg(...)
Run Code Online (Sandbox Code Playgroud)

要么:

# if gathered in image.py
from mypackage import image
this_image = image.png(...)
that_image = image.jpeg(....)
Run Code Online (Sandbox Code Playgroud)


fal*_*tru 6

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

from package.obj import obj
my_obj = obj()
Run Code Online (Sandbox Code Playgroud)