一段代码工作,我不明白为什么。它应该不符合我的理解。下面很容易说明这个问题:
“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()
如何确定如何调用此方法?
答案 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)不同,对方法的调用在实际执行之前不会受到约束,因此导入模块的原因是定义的方法不是必需的。这有几个含义:
请注意,这并不是动态类型语言和静态类型语言之间所有区别的详尽列表。
答案 2 :(得分:1)
从导入类的yTypeObj.func
调用函数main.py
。因此,可以构造对象并将其传递给函数,其所有方法(functionThatReturnAString
都是objOfTypeX
的方法)。