2013-09-25 62 views
7

这似乎是一个愚蠢的问题,但我一直无法在任何地方找到答案。在我的各种软件包中,我有一组模块,通常每个模块都包含一个类。当我想创建一个类的实例,我不得不提到它两次:避免在python中输入类名称

例: 包/ obj.py:

class obj(object): 
    pass 

file.py:

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

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

+1

在'__init __ py','从OBJ进口obj',然后在'file.py',您可以用'从包导入obj; my_obj = obj()' –

+0

Upvoted为什么? –

+1

因为sfpiano会将实际的代码片段放在显示他正在谈论的内容中。 –

回答

7

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(....) 
5

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

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

给你的类和模块有意义的名字。就是这个方法。命名你的模块'类'并命名你的类'MyClass'。

from package.classes import MyClass 

myobj = MyClass()