我们什么时候需要Python导入语句?

时间:2012-11-13 17:42:13

标签: python python-import

一段代码工作,我不明白为什么。它应该不符合我的理解。下面很容易说明这个问题:

“Main.py”

from x import * #class x is defined
from y import * #class y is defined


xTypeObj = x()
yTypeObj = y()
yTypeObj.func(xTypeObj)

“x.py”

class x(object):

    def __init__...
        ...
    def functionThatReturnsAString(self):
        return "blah"

“y.py”

#NO IMPORT STATEMENT NEEDED?? WHY

class y(object):
    def __init__...
        ...
    def func(self, objOfTypeX):
        print(objOfTypeX.functionThatReturnsAString())

我的问题是为什么我不需要在类型为

的“y.py”中有一个import语句
from x import functionThatReturnAString()

如何确定如何调用此方法?

3 个答案:

答案 0 :(得分:9)

Python是一种面向对象的编程语言。在这种语言中,值是对象,对象可以有方法。

functionThatReturnsAString函数是类的方法,objOfTypeX是该类的实例。一个类的实例带有它所有类的方法。

这就是为什么,例如,python中的list个对象有.append()方法:

>>> alist = []
>>> alist.append(1)
>>> alist
[1]

list类有一个.append()方法,您无需导入该方法即可调用它。您所需要的只是对列表实例的引用。

从技术上讲,python list类型,但这种区别并不重要。总的来说,为了讨论的目的,类型与类相同。

请继续阅读Python Tutorial,它将在后面的章节中解释课程(但您可能希望首先浏览第一组章节)。

答案 1 :(得分:3)

Python是一种动态类型语言。与静态类型语言(如C ++和Java)不同,对方法的调用在实际执行之前不会受到约束,因此导入模块的原因是定义的方法不是必需的。这有几个含义:

  1. 可以在运行时向实例添加和删除方法(和数据成员),因此类Foo的两个实例实际上可以有不同的方法,即使它们属于同一类型。
  2. 可以在运行时向类添加和删除方法(和数据成员),这将影响所有当前实例以及新实例。
  3. 可以在运行时向类中添加和删除基类。
  4. 请注意,这并不是动态类型语言和静态类型语言之间所有区别的详尽列表。

答案 2 :(得分:1)

从导入类的yTypeObj.func调用函数main.py。因此,可以构造对象并将其传递给函数,其所有方法(functionThatReturnAString都是objOfTypeX的方法)。