如何继承python 3中类的__init__方法内部定义的变量

时间:2018-10-29 07:27:46

标签: python python-3.x inheritance tkinter

我希望let imageView = UIImageView() imageView.image = UIImage.named("yourImage") // do any settings to your imageView let titleTap = UITapGestureRecognizer(target: self, action: #selector(titlePressed)) self.navigationItem.titleView = imageView self.navigationItem.titleView?.isUserInteractionEnabled = true self.navigationItem.titleView?.addGestureRecognizer(titleTap) 变量在类Pin中接受某些输入,但要StartPage继承,但是要使用任何使用Options变量的代码。 Pin给出错误print(Pin)。将NameError: name 'Pin' is not definedStartPage都作为父类传递给类tk.Frame会产生错误Option。不要判断我,因为我是Tkinter和OOP的新手,任何解释性的解决方案都将受到高度赞赏。

TypeError Cannot create a consistent method resolution
order (MRO) for bases Frame, StartPage

1 个答案:

答案 0 :(得分:1)

  

我希望Pin变量在StartPage类中需要一些输入   由Options类继承。

使用self.Pin。另外,实例名称的约定以小写字母开头,因此self.pin。 初始化也应使用self

class StartPage(tk.Frame):

def __init__(self, parent, controller):
    tk.Frame.__init__(self, parent)
    self.pin = tk.Entry(self, bd = 4, relief="groove", show="*", font=20, justify='center')
    self.pin.pack()
    ...

,并始终将父级的构造函数作为子级__init__中的第一条语句。

class Options(StartPage):
    def __init__(self, parent, controller): 
        StartPage.__init__(self, parent)
        print(self.pin)

您应该做什么?

Composition over inheritance。 如果您只想在StartPage类中从Options获得一个字段,则可以简单地将pin作为参数传递。

class StartPage(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        self.controller = controller
        self.pin = tk.Entry(self, bd = 4, relief="groove", show="*", font=20, justify='center')
        self.pin.pack()
        ...


class Options(fk.Frame):

    def __init__(self, parent, controller, pin):
        tk.Frame.__init__(self, parent)
        self.controller = controller
        print(pin)
        ...

然后从外面看起来像这样:

start_page = StartPage(some_parent, some_controller)
options = Options(some_parent, some_controller, start_page.pin)