此代码是此处提到的主要计算器应用程序的一部分:https://pastebin.com/ECA2AQzY
我是python的新手,也是我的理解," self"是为类的每个实例自动传递的第一个参数。在这里,我很困惑" app"会是自我?和Frame是一些超类?
我不明白为什么在主 init 方法中在Frame上调用 init ?
另外,为什么需要lambda?它可以不是命令= self.appendToDisplay(" 7"))
需要在" app"上调用网格方法。在类本身中调用网格时的对象?
from multiprocessing import Pool
import numpy as np
# a = np.array([1,2,3])
def f(x):
return a*x
if __name__ == '__main__':
a = np.array([1,2,3])
with Pool(5) as p:
print(p.map(f, [1, 2, 3]))
答案 0 :(得分:1)
让我们尝试按顺序回答您的问题:
Application
的 Frame
intherrits,Frame
中实施的所有方法也可在Application
中使用。此外,Application
可以实现自己的方法,并覆盖Frame
中的实现。在后一种情况下,Application
中的实现替换Frame
中的实现。这是__init__()
方法的情况。 Application
中的方法取代Frame
中的方法。因此,永远不会调用Frame()
__init__()
方法,这通常不好,因为Frame()
中可能有很多需要显式初始化的函数。因此,Application.__init__()
必须明确调用Frame.__init__()
才能使其初始化。
self.appendToDisplay("7")
和lambda: self.appendToDisplay("7")
之间的区别在于,在第一种情况下,直接调用方法appendToDisplay()
并返回结果。使用lambda
而不是调用函数时,会定义一个新函数。因此,使用lambda
构造时,结果将无法直接获得。相反,当要执行command
时,计算结果将延迟到稍后的时间。因此,我们希望在按下按钮时在显示屏上显示7
,而不是现在。
grid
中的Application.createWidgets()
来电是指按钮,将其放入计算器Application
。另一方面,Application.grid()
调用是放置整个计算器本身。因此,它是一个层次结构的东西,首先放置应用程序的各个部分,然后放置应用程序本身。
我希望上述答案可以帮助您更好地理解这些概念。它可能需要消化很多,你应该尝试找一些教程来更详细地解释这些概念。