/ / qual modo de importar é melhor em python e alguns esclarecimentos sobre os objetos de classe - python, class, object, import

qual modo de importar é melhor em python e alguns esclarecimentos sobre os objetos de classe - python, class, object, import

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 № 1

Para 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 barfazendo 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.