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

2024-09-30 22:11:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我不明白为什么一段代码能起作用。据我所知,这不应该起作用。下面简单地说明了这个问题:

““主.py““

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


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

“x.py”

^{pr2}$

“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()

它如何计算出如何调用此方法?在


Tags: no代码frompyimportisdefclass
3条回答

Python是一种动态类型语言。与静态类型语言不同,如C++和java调用,直到实际执行时,方法才被绑定,因此为什么不导入该方法是不需要定义的方法。这有几个含义:

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

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

函数yTypeObj.func从导入类的main.py调用。因此,对象可以被构造并传递给函数,以及它的所有方法(functionThatReturnAString是{}的方法)。在

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

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

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

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

{cd3>方法不需要调用。您只需要引用一个列表实例。在

从技术上讲,python list是一种类型,但这种区别在这里并不重要。总的来说,类型和类是一样的,就本讨论而言。

请务必阅读Python Tutorial,它将在后面的章节中解释类(但您可能需要先浏览第一组章节)。在

相关问题 更多 >