鉴于这个基本的例子,但实际上它更复杂: (文件名是TestFile)
class Example:
def test1():
print("First test")
def test2():
print("Second test")
def test3():
#Call test1()
#Call test2()
我尝试了Example.test1()
和Example.test2()
,但是如果有人会这样做
from TestFile import Example as MagicTrick
最终功能不会中断吗?
答案 0 :(得分:1)
实际上,您通常会调用self.test1()来调用实例上的方法。
明确显示@BrenBarn所说的内容:
class Example:
def test1():
print("First test")
def test2():
print("Second test")
def test3(self):
self.test1()
self.test2()
答案 1 :(得分:0)
不,由于这种导入,它不会破坏。使用as
导入不同名称的内容只会影响导入内容的内容。在原始文件TestFile
中,该类仍将被称为Example
,并且仍然可以像这样引用自身。换句话说,在导入中使用as
只会创建一个“本地别名”;它不会更改导入对象可能引用它的任何其他名称。
实际上,您通常会调用self.test1()
来调用实例上的方法。这对你的例子不起作用,因为你没有提供self
参数,但也许这是你的“基本”例子的疏忽。
答案 2 :(得分:0)
无论如何,代码都会起作用,因为函数会记住在哪里查找全局名称。
在Python中,每个函数对象都包含对定义它的全局上下文的引用(该属性在从Python 2.x传递到Python 3.x时被重命名):
# Python 2
def foo(): pass
print foo.func_globals['foo'] is foo # --> True
# Python 3
def foo(): pass
print(foo.__globals__['foo'] is foo) # --> True
此上下文是在执行功能代码期间查找全局名称的位置,无论来自何处。
尽管Example
在上下文中不会作为MagicTrick
的方法调用,但它确实存在,它将在执行方法时定义该类的类别(独立于您使用不同的名称找到该类并在不同的上下文中查找它的事实。)
答案 3 :(得分:-1)
我会将调用保存为对象,然后在test3中使用
def test1(): 打印......
def test2(): 打印......
A = test1()
B = test2()
def test3():
A
乙