我试图将一些值从一个类继承到另一个类。我正在使用super函数来继承。下面是我的问题的简化版本。谢谢你的帮助。你知道吗
from tkinter import *
import random
class First(object):
def __init__(self,master):
super(First, self).__init__(master)
def random(self):
self._y = random.randint(11,20)
self._x = random.randint(1,10)
def random2(self):
s = First(root)
s.random()
class Second(Frame,First):
def __init__(self,master):
super(Second, self).__init__(master)
self.grid()
self.menuFrame = Frame(self)
self.create_menu_widgets()
self.menuFrame.grid()
def create_menu_widgets(self):
btnMainMenu = Button(self.menuFrame,font=("consolas",18,"bold"),text="Main Menu")
btnMainMenu.pack()
def print(self):
print(self._y,self._x)
root = Tk()
x = Second(root)
x.random()
x.random2()
x.print()
root.configure(background = 'green')
root.mainloop()
我不断得到错误:
super(First, self).__init__(master)
TypeError: object.__init__() takes no parameters
请帮帮我,我想问题是我在哪里有s=第一(根)。谢谢你的帮助。你知道吗
当您对层次结构中最高的类调用
super
时,它将转到object
。object
是Python中所有对象的超类。所以super(First, self).__init__(master)
将尝试初始化object
,而不是初始化任何类。您可以使用Class.__mro__
来查看此继承。弄明白我在说什么。你知道吗从对象继承?默认情况下,即使没有指定任何内容,也会发生这种情况。所以我猜你想从
Frame
继承,因为object
没有任何意义。你知道吗所以把你的代码改成这个,它应该是固定的。你知道吗
我在你的例子中看到了几个问题。你知道吗
一:
将
Second()
分配给x
,然后调用x.random()
和x.random2()
。这将不起作用,因为您的随机方法只存在于First()
类中。你知道吗二:
不要将函数、方法、变量或属性命名为与内置方法相同的名称。这会引起问题。你知道吗
把你的
def print(self)
改成def my_print(self)
或者其他不完全是print
的东西。当我们讨论这个print语句时,您只在First()
类中定义self._x
和self._y
,但尝试在Second()
类中打印它们。这是行不通的。self
始终是对类对象的引用,而不是对传递给类的类控制器的引用。你知道吗现在我了解了您在这里要做的事情,我将重建您的代码以展示如何在类之间共享信息。你知道吗
不应在Frame类内部使用“几何体管理器”。而是在类变量名上使用它。这将允许您在类的任何几何图形管理器之间进行选择,而不是只使用一种。你知道吗
正如Vineeth所指出的,对于对象类,不能使用supper。你知道吗
下面的代码将运行
Second()
类,然后当您想引用First()
类上的随机方法时,您可以使用我添加到Second()
的新方法来实现。如果你有任何问题,请告诉我。你知道吗最后一个更改是将tkinter作为
tk
导入,这将有助于防止意外地覆盖从tkinter导入的方法。你知道吗下面是代码的工作示例:
相关问题 更多 >
编程相关推荐