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

Tom*_*mmy 5 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)
Run Code Online (Sandbox Code Playgroud)

"x.py"

class x(object):

    def __init__...
        ...
    def functionThatReturnsAString(self):
        return "blah"
Run Code Online (Sandbox Code Playgroud)

"y.py"

#NO IMPORT STATEMENT NEEDED?? WHY

class y(object):
    def __init__...
        ...
    def func(self, objOfTypeX):
        print(objOfTypeX.functionThatReturnsAString())
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么我不需要在类型的"y.py"中有一个import语句

from x import functionThatReturnAString()
Run Code Online (Sandbox Code Playgroud)

它如何弄清楚如何调用此方法?

Mar*_*ers 9

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

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

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

>>> alist = []
>>> alist.append(1)
>>> alist
[1]
Run Code Online (Sandbox Code Playgroud)

list类有一个.append()方法,你不需要导入方法能够调用它.您所需要的只是对列表实例的引用.

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

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


Jos*_*man 3

Python 是一种动态类型语言。与 C++ 和 Java 等静态类型语言不同,对方法的调用在实际执行之前不会绑定,因此不需要导入定义了该方法的模块。这有几个含义:

  1. 方法(和数据成员)可以在运行时添加到实例中或从实例中删除,因此 Foo 类的两个实例实际上可以具有不同的方法,即使它们具有相同的类型。
  2. 可以在运行时向类添加或从类中删除方法(和数据成员),这将影响所有当前实例以及新实例。
  3. 可以在运行时向类添加和删除基类。

请注意,这并不是动态类型语言和静态类型语言之间所有差异的详尽列表。