1

昨日も同じような質問をしましたが、それ以来、本当に奇妙な問題を抱えています。このディレクトリ構造では:

app/
    models/
        __init__.py
        user.py
        other.py
    pages/
        __init__.py
        pages.py

models / __init__。pyファイルには次の行があります。

__all__ = ['user', 'other']

そしてpages/__init__。pyには

__all__ = ['pages']

pages.pyで、user.pyまたはother.pyのクラスを使用するには、次のことが必要です。

from models import *
import models

上部に、次のUserようなクラスを宣言できます。

my_user = models.user.User()

上部のインポートステートメントのいずれかを除外すると、次のようなエラーが発生します

"Class user has no attribute User"

どんな助けでもいただければ幸いです。私はPythonが大好きですが、インポート機能がPHPのように機能することを望みます。

4

3 に答える 3

1
import models.user
于 2010-02-18T17:13:46.213 に答える
1

明示したい場所と「デフォルト」で利用できる量に応じて、2つのオプションがあります(これは強制も意味します)。

これらの__init__ファイルでは、次のものを使用できます。

# models/__init__.py shown:
import user, other                 # ambiguous relative import
from . import user, other          # relative import
from app.models import user, other # absolute import

または、他の方法で使用する場合は、次import modelsを使用します。

from models import user, other
# or:
import models.user, models.other

後者の形式がより広く好まれます。

于 2010-02-18T17:15:43.070 に答える
1

Python(またはデバッグ)を学習しているときに本当に役立つことがあるのは、インタラクティブに実行し、dir()関数を使用して何がどこにあるかを確認することです。

>>> dir()
['__builtins__', '__doc__', '__name__', '__package__']
>>> import models
>>> dir(models)
['__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']
>>> models.user
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'user'
>>> from models import *
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'models', 'other', 'user']
>>> dir(models)
['__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__','__path__', 'other', 'user']
>>> user
<module 'models.user' from 'C:\test\models\user.py'>
>>> models.user
<module 'models.user' from 'C:\test\models\user.py'>
>>> user.User
<class 'models.user.User'>

更新:出力を修正しました。

于 2010-02-18T17:25:33.330 に答える