Ich habe eine Python-Datei namens Point2.py, die den folgenden Code enthält
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)
Jetzt im Dolmetscher habe ich folgendes gemacht:
>>> import Point2
>>> p1 = Point()
Ich habe aber einen Fehler erhalten:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: "module" object is not callable
Die Point2.py-Datei enthält die Point-Klasse. Warum ich es nicht p1 zuordnen kann. Als ich es versuchte:
>>> from Point import *
>>> p1 = Point()
Es klappt
Ich habe die Datei in Point.py umbenannt und es dann gemacht
>>> import Point
>>> p1 = Point
und das funktioniert, aber Werte zuweisen ist nicht einfach.
Jedoch,
>>> from Point import *
>>> p1 = Point(3,4)
funktioniert.
Meine Frage ist, warum es sich beim Import von Point und beim Import von Point * anders verhält. Welche Art des Importierens ist ein guter Stil?
Und gibt es Relevanz für die Klasse und den Dateinamen?
Antworten:
4 für die Antwort № 1Um zu antworten warum:
>>> import Point2
>>> p1 = Point()
funktioniert nicht, weil Sie die Klasse Point () nicht direkt importiert haben Point()
Klasse, die Sie machen wollen:
>>> import Point2
>>> p1 = Point2.Point()
Oder
>>> from Point2 import Point
>>> p1 = Point()
Tun from x import *
Importe alles aus dem Modul. Also, wenn es eine Funktion gab foo()
in einem Modul bar
, tun from bar import foo
würde die Funktion importieren, damit Sie es tun könnten foo()
und muss nicht tun bar.foo()
. Deshalb hast du es getan from Point import *
, es hat funktioniert, wie Sie es nicht brauchen Point.Point()
.
Welcher Weg ist besser zu importieren? Gut zu tun from x import *
Es wird nicht empfohlen, wenn Sie nicht alles in verwenden x
. Es kann auch mit Funktionen in Ihrem eigenen Skript vermischt werden.
Mit from x import y
oder import x
, Schau mal bei dieser Frage.