Mám súbor python s názvom Point2.py, ktorý má nasledujúci kód
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)
Teraz v tlmočníkovi som to urobil:
>>> import Point2
>>> p1 = Point()
Ale ja som dostal chybu:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: "module" object is not callable
Súbor Point2.py má v ňom triedy Bod. Prečo nie som schopný priradiť to p1. Keď som sa pokúsil:
>>> from Point import *
>>> p1 = Point()
Funguje to
Premenoval som súbor na Point.py a potom som to urobil
>>> import Point
>>> p1 = Point
a to funguje, ale priradenie hodnôt nie je jednoduché.
Avšak,
>>> from Point import *
>>> p1 = Point(3,4)
funguje.
Moja otázka je, prečo sa správa inak, keď dovážam Point a keď som to urobil z Point import *. Ktorý spôsob importu je dobrý štýl?
A existuje nejaký význam pre triedu a názov súboru?
odpovede:
4 pre odpoveď č. 1Odpoveď prečo:
>>> import Point2
>>> p1 = Point()
nefunguje, je to preto, že ste priamo neimportovali triedy Point () Point()
trieda, budete chcieť:
>>> import Point2
>>> p1 = Point2.Point()
alebo
>>> from Point2 import Point
>>> p1 = Point()
Robí from x import *
dovoz všetko z modulu. Takže ak bola funkcia foo()
v module bar
, robí from bar import foo
importovať funkciu, aby ste to mohli urobiť foo()
a nemusíte robiť bar.foo()
, To je dôvod, prečo ste to urobili from Point import *
, fungovalo to tak, ako ste nemuseli robiť Point.Point()
.
Ktorý spôsob je lepšie importovať? No, robiť from x import *
nie je odporúčané, ak nepoužijete všetko x
, Môže sa tiež zmiešať s funkciami vo vašom skripte.
s from x import y
alebo import x
, pozri sa na túto otázku.