如何从大师班聚合一个函数 - Python

Posted

技术标签:

【中文标题】如何从大师班聚合一个函数 - Python【英文标题】:How to aggregate a function from the master class - Python 【发布时间】:2017-07-08 21:08:37 【问题描述】:

我怎样才能让下面的代码工作,而不会得到TypeError: myMasterFunction() missing 1 required positional argument: 'master'的错误

示例程序:

from tkinter import *
class printing():
    def printSentence(self):
        #Call print_name function
        myMasterClass().print_name()
        print("Tom")

class myMasterClass():
    def __init__(self,master):
        super(myMasterClass,self).__init__(master)
    def print_name(self):
        print("My name is...")

printing().printSentence()
root = Tk()
myGUI = myMasterClass(root)
root.mainloop()

非常感谢。 P.S 我是 OOP 的新手,所以我不确定这是否是聚合,但我不想做继承。

【问题讨论】:

您发布的代码不可能给出错误myMasterFunction() missing 1 required positional argument,因为尚未定义myMasterFunction @BryanOakley 哦,对不起。 myMasterClass 而不是 【参考方案1】:

我不知道您要实现什么,但是当您创建 print class 时,您将覆盖原来的 print function命名空间。并且由于您的 print class 不带任何参数(未提供 __init__),因此调用 print("Tom") 将引发错误。那是第一个。另一个是打电话给super(myMasterClass,self).__init__(master)。如您所见,您没有在此类中使用任何继承,默认情况下它将继承自 object 类。并且对象类也不接受任何参数,因此尝试提供master 参数将导致错误。总的来说,我不知道你想在这里实现什么,但我认为如果你想在默认的 print 函数中添加一些额外的东西,使用装饰器而不是类似的东西会更容易。

【讨论】:

print("Tom") 实际上只打印字符串“Tom”。这个问题与给类和函数的名称无关。 顺便说一句,这不是我的实际程序。我刚刚编了一个来证明我的问题 我稍微更改了代码以表明我有一个 GUI。你能告诉我如何解决这个问题吗? 如我所说。问题出在myMasterClass().print_name()。您的 myMasterClass 需要在您的 __init__ 定义中传递一个参数。您没有在 printing.printSentence() 函数中传递它。

以上是关于如何从大师班聚合一个函数 - Python的主要内容,如果未能解决你的问题,请参考以下文章

MySQL聚合函数

将聚合函数从 R 转换为 python [重复]

Python - 100天从新手到大师

红樽大师班 | 葡萄酒大师Emma Jenkins的《Syrah三国志》

线程消息或更好:访问“大师班”中其他班级的成员

关于聚合函数的练习