5

この件に関して、オンライン検索はそれほど役に立ちませんでした。いくつかのクラスでモジュールを作成してテストしようとしています。私は最初の部分を渡すことができませんでした。3つの属性とそのゲッターメソッドを持つ単純なクラスを作成したので、「メイン」メソッドからそれらの属性が表示されます(推測)

後で使用できるように、このクラスのオブジェクトをいくつか作成する必要があります。

クラス定義は

class Person:
    def __init__(self, n, a, s):
        self.name = n
        self.age = a
        self.sex = s
    def getAge(self):
        return self.age
    def getSex(self):
        return self.sex

このファイルをtest.pyファイルに保存しました。シェルからインポートしますが、インスタンス化してオブジェクトを作成すると同じエラーが発生し続けます

Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    x = Person('myname', 10, 'm')
NameError: name 'Person' is not defined

test.py は C:/Python3.x ディレクトリにあるため、このエラーは発生しません。

シェルにクラス全体を入力してオブジェクトをインスタンス化するだけですべてが機能しますが、モジュールは時間の経過とともに成長するため、私の場合は役に立ちません。

助けてくれる場合にのみ回答してください。シェルなしでは何も説明しない同じチュートリアルに私を送らないでください。モジュールを操作し、そのエラーの意味を理解する必要があります。

4

1 に答える 1

7

あなたのクラスはおそらく から派生しているはずobjectですが、それがエラーの原因ではありません。明示的にインポートされていない名前にアクセスしようとしている可能性があります。モジュール全体をインポートすることも、モジュールから名前をインポートすることもできます。

import test
test.Person()

または

from test import Person
Person()

または両方。エラーはありませんが、あまり意味がありません。

他の言語の動作を模倣するために入力したくなるかもしれませんfrom test import *が、ほとんどの場合、これは python では悪いスタイルと見なされます。明示的は暗黙的よりも優れています。

インポートの仕組みの詳細については、 を試してからimport testを試してくださいdir(test)。またはimport itertools、またはWerkzeugdir(itertools)のような素敵なコードベースをダウンロードし、コードを読んで構造を確認し、REPL を介してナビゲートしてみてください。

于 2012-09-26T14:52:16.300 に答える