Eu tenho um arquivo python chamado Point2.py, que tem o seguinte código
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)
Agora no intérprete, fiz isso:
>>> import Point2
>>> p1 = Point()
Mas recebi um erro:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: "module" object is not callable
O arquivo Point2.py tem classe Point nele. Por que não consigo atribuí-lo a p1. Quando eu tentei:
>>> from Point import *
>>> p1 = Point()
Funciona
Eu renomei o arquivo para Point.py e então eu fiz
>>> import Point
>>> p1 = Point
e isso funciona, mas atribuir valores não é fácil.
Contudo,
>>> from Point import *
>>> p1 = Point(3,4)
trabalho.
Minha pergunta é por que ele se comporta de maneira diferente quando eu importo Point e quando eu fiz isso de Point import *. Qual a maneira de importar é um bom estilo?
E existe alguma relevância para a classe e o nome do arquivo?
Respostas:
4 para resposta № 1Para responder por quê:
>>> import Point2
>>> p1 = Point()
não funciona, é porque você não importou diretamente a classe Point (). Para acessar o Point()
classe, você vai querer fazer:
>>> import Point2
>>> p1 = Point2.Point()
Ou
>>> from Point2 import Point
>>> p1 = Point()
Fazendo from x import *
importações tudo do módulo. Então, se houvesse uma função foo()
em um módulo bar
fazendo from bar import foo
importaria a função para que você pudesse fazer foo()
e não tem que fazer bar.foo()
. É por isso que quando você fez from Point import *
, funcionou como você não precisou fazer Point.Point()
.
Qual a melhor maneira de importar? Bem feito from x import *
não é recomendado a menos que você vá usar tudo em x
. Ele também pode se misturar com funções em seu próprio script.
Com from x import y
ou import x
, dê uma olhada nesta pergunta.