继承后检索类变量

时间:2016-04-12 14:09:46

标签: python class

所以我在tkinter做了一个刽子手游戏,我按下时按下按钮消失,按下重启按钮后重新出现。我还在学习编码,并试图调整它以包含类以使代码更清晰。这是我用来创建按钮小部件的代码:

class Buttons:

    def __init__(self, letter, column, row):
        self.letter = letter
        self.column = column
        self.row = row

    def create(self):
        column = self.column
        row = self.row
        letter = self.letter
        self = tk.Button(window, text=self.letter, bg = colour, font=FONT,
                         command=lambda : check(letter))
        self.place(relx=column, rely=row)

然后我按下这样的按钮,一切正常:

A = Buttons('A', column1, row1).create()

我想要做的是访问“自我”,“自我”,“自我”和“自我”栏目#39;在类定义之外,但当我尝试使用' A.letter'时,它表示该对象是Nonetype。它没有属性字母。 回溯(最近一次调用最后一次):

  File "C:\Users\cameron\Documents\Python\Hangman\Hangman v2.1.py", line       227, in <module>
    print(A.letter)
AttributeError: 'NoneType' object has no attribute 'letter'

有谁知道我怎么能访问这个?

谢谢

1 个答案:

答案 0 :(得分:3)

您无需重新分配self。试试这个:

    def create(self):
        #column = self.column   # don't need these
        #row = self.row
        #letter = self.letter
        self.tkbutton = tk.Button(window, text=self.letter, bg = colour, font=FONT, command=lambda : check(letter))
            # Stashes the tk.Button instance away in `self.tkbutton`.
        self.tkbutton.place(relx=self.column, rely=self.row)

self始终保持不变,因此您永远不应该说self = <whatever>。相反,请使用self.<some field name> = <whatever value>。然后<some field name>可以从外部访问A.<some field name>

然后,要使用该按钮,请尝试

A = Buttons('A', column1, row1)    # calls A.__init__()
A.create()
# at this point A.tkbutton exists and is accessible.

虽然更好的方法可能是将create的工作合并到__init__,以便创建按钮并将其置于A=Buttons(...)调用中。

修改您收到NoneType错误的原因是create()不包含return语句。因此,其返回值为None。因此,A=Buttons(...).create()会返回None,即NoneType