3

ピラミッドプロジェクトディレクトリに「models」という名前のフォルダを作成し、そこにすべてのモデルを次のような個別のファイルに配置しました。

models
  |------ User.py
            |------- class User
  |------ Group.py
            |------- class Group

initializeb.pyのようないくつかのスクリプトでは、次のようなものを書く必要があります

from ..models.User import User
from ..models.Group import Group

かなり醜いです。'emを短縮する方法

from ..models import User
from ..models import Group

のような冗長性を追加せずに

from .User import User
from .Group import Group

モデル/init.py

4

3 に答える 3

3

それを行う唯一の方法は、次の方法models/__init__.pyです。

from User import User
from Group import Group

これはmodelsパッケージになり、を使用できるようになりますfrom ..models import User

一言アドバイス:標準的な方法は、すべて小文字のモジュール名を使用し、クラスのキャピタライゼーションを予約することです。userこれにより、モジュールとクラスの両方をUser同時に同じ名前空間に含めることができます。これは、モジュールにクラスを操作するための便利な関数が含まれている場合に便利です。

于 2012-09-10T04:48:10.720 に答える
3

これは、自動化する方法の大まかな例です。__init__.py次のように作成します。

import os
import sys
import glob
import pkgutil

def auto_importer():
    here = os.path.split(__file__)[0]
    for _, package, _ in pkgutil.iter_modules( [here] ):
        package_name = '%s.%s' % (here, package)
        if package_name not in sys.modules:
            __import__( package_name )
            module = sys.modules[package_name]
            public_members = (m for m in getattr(module, '__all__', dir(module)) if not m.startswith('__'))
            for member in public_members:
                globals()[member] = getattr(module, member)

auto_importer()

# clean up namespace to avoid these leaking out
del os, sys, glob, pkgutil
del auto_importer

これにより、接頭辞が付いていない、含まれている各モジュールからすべてがインポートされます__(したがって、のように、各モジュールからすべての特別な属性を取得することはありません__file__)。Groupたとえば、モジュールからクラスをインポートするだけの場合は、次のようgroupに行を追加group.pyします。

__all__ = [ 'Group' ]
于 2012-09-10T07:23:37.480 に答える
0

残念ながら、models / __ init __。py内にインポートせずに、要求していることを実行する方法はありません。または、モデルごとに個別の.pyファイルを作成するのではなく、すべてのモデルを1つの.pyファイルに含めます。

ごめん。

于 2012-09-10T03:12:40.700 に答える