0

私はPoint2.pyという名前のPythonファイルを持っています。これには次のコードがあります

class Point():   
    def __init__(self,x=0,y=0):
        self.x = x
        self.y = y
    def __str__(self):
        return "%d,%d" %(self.x,self.y)

今通訳で、私はこれをしました:

>>> import Point2
>>> p1 = Point()

しかし、私はエラーを受け取りました:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'module' object is not callable

Point2.pyファイルにはPointクラスが含まれています。なぜそれをp1に割り当てることができないのですか。私が試したとき:

>>> from Point import *

>>> p1 = Point() 

できます

ファイルの名前をPoint.pyに変更してから、

>>> import Point
>>> p1 = Point 

これは機能しますが、値の割り当ては簡単ではありません。

でも、

>>> from Point import *
>>> p1 = Point(3,4)  

動作します。

私の質問は、PointをインポートしたときとPointimport*から行ったときで動作が異なる理由です。どちらのインポート方法が良いスタイルですか?

また、クラスとファイル名に関連性はありますか?

4

1 に答える 1

4

理由に答えるには:

>>> import Point2
>>> p1 = Point()

クラス Point() を直接インポートしなかったためです。クラスにアクセスするには、次のPoint()ようにします。

>>> import Point2
>>> p1 = Point2.Point()

または

>>> from Point2 import Point
>>> p1 = Point()

実行すると、モジュールからfrom x import *すべてがインポートれます。したがってfoo()、モジュールに関数があった場合bar、実行from bar import fooすると関数がインポートされるため、実行できますが、実行する必要はfoo()ありませんbar.foo()。これが、実行したときに、実行from Point import *する必要がなかったために機能した理由ですPoint.Point()


どの方法でインポートするのが良いですか? ですべてを使用する場合を除き、from x import *実行することはお勧めしませんx。また、独自のスクリプト内の関数と混同される可能性もあります。

from x import yまたはで、この質問import xを見てください。

于 2013-03-17T03:47:58.803 に答える