__init__方法在main方法内部调用的应用程序上实现

时间:2018-03-11 04:41:09

标签: python class initialization

此代码是此处提到的主要计算器应用程序的一部分: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]))

1 个答案:

答案 0 :(得分:1)

让我们尝试按顺序回答您的问题:

    来自Application
  1. Frame intherrits,Frame中实施的所有方法也可在Application中使用。此外,Application可以实现自己的方法,并覆盖Frame中的实现。在后一种情况下,Application中的实现替换Frame中的实现。这是__init__()方法的情况。 Application中的方法取代Frame中的方法。因此,永远不会调用Frame() __init__()方法,这通常不好,因为Frame()中可能有很多需要显式初始化的函数。因此,Application.__init__()必须明确调用Frame.__init__()才能使其初始化。

  2. self.appendToDisplay("7")lambda: self.appendToDisplay("7")之间的区别在于,在第一种情况下,直接调用方法appendToDisplay()并返回结果。使用lambda而不是调用函数时,会定义一个新函数。因此,使用lambda构造时,结果将无法直接获得。相反,当要执行command时,计算结果将延迟到稍后的时间。因此,我们希望在按下按钮时在显示屏上显示7,而不是现在。

  3. grid中的Application.createWidgets()来电是指按钮,将其放入计算器Application。另一方面,Application.grid()调用是放置整个计算器本身。因此,它是一个层次结构的东西,首先放置应用程序的各个部分,然后放置应用程序本身。

  4. 我希望上述答案可以帮助您更好地理解这些概念。它可能需要消化很多,你应该尝试找一些教程来更详细地解释这些概念。