在Python中哪种导入方式更好,关于类对象的一些说明

0 投票
1 回答
766 浏览
提问于 2025-04-17 19:22

我有一个叫做 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 和使用 from Point import * 时,行为会不一样?哪种导入方式比较好?

还有,类和文件名之间有什么关系吗?

1 个回答

4

来解释一下为什么:

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

不管用什么方法都不行,是因为你没有直接导入 Point() 这个类。要使用 Point() 类,你需要这样做:

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

或者

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

使用 from x import * 会把模块里的所有东西都导入进来。所以如果在一个叫 bar 的模块里有一个函数 foo(),你用 from bar import foo 就可以直接用 foo(),而不需要写成 bar.foo()。这就是为什么当你写 from Point import * 时,它能正常工作,因为你不需要写成 Point.Point()


那么,哪种导入方式更好呢?其实,除非你打算用到 x 里的所有东西,否则不推荐使用 from x import *。这样做可能会和你自己脚本里的函数搞混。

使用 from x import y 或者 import x 的话,可以看看 这个问题

撰写回答