在Python中哪种导入方式更好,关于类对象的一些说明
我有一个叫做 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
的话,可以看看 这个问题。