12

これはばかげた質問のように思えますが、どこにも答えを見つけることができませんでした。さまざまなパッケージ内に一連のモジュールがあり、通常はそれぞれに 1 つのクラスが含まれています。クラスのインスタンスを作成したいときは、それを 2 回参照する必要があります。

例: package/obj.py:

class obj(object):
    pass

ファイル.py:

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

名前を 2 回入力する必要がないようにコードを再編成する方法はありますか? 理想的には、package.obj() と入力するだけで済みます。

4

3 に答える 3

13

Python は Java ではありません。自由に多くのクラスを 1 つのファイルに入れ、カテゴリに従ってファイルに名前を付けてください。

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(....)
于 2013-09-25T17:03:16.513 に答える
6

from ... import ...ステートメントを使用できます:

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

クラスとモジュールに意味のある名前を付けます。それが方法です。モジュールに「classes」という名前を付け、クラスに「MyClass」という名前を付けます。

from package.classes import MyClass

myobj = MyClass()
于 2013-09-25T17:01:09.523 に答える