Python 在类中,如何对已经有类的对象调用方法?

Python 在类中,如何对已经有类的对象调用方法?,python,class,tkinter,methods,Python,Class,Tkinter,Methods,目前我正在使用tkinter,我需要对具有Tk()类的对象调用一个方法。我试图调用的不是Tk()类中的方法,而是我已经创建的类,tkinter对象已经在该类中 我试图调用.Format()到l\u label,但我认为它试图在tkinter的label类中找到一个属性或方法,因为它返回:AttributeError:“label”对象没有属性“Format” 有什么想法吗 from tkinter import * from tkinter import messagebox from tkin

目前我正在使用tkinter,我需要对具有Tk()类的对象调用一个方法。我试图调用的不是Tk()类中的方法,而是我已经创建的类,tkinter对象已经在该类中

我试图调用.Format()l\u label,但我认为它试图在tkinter的label类中找到一个属性或方法,因为它返回:AttributeError:“label”对象没有属性“Format”

有什么想法吗

from tkinter import *
from tkinter import messagebox
from tkinter import filedialog

thing = Tk()

class App():
    def __init__(self, master, _title, back='white'):
        self.master = master
        self._title = _title
        self.back = back
        self.master.title(self._title)
        self.master.configure(background=back)

    def label(self, _text, back='white', w=1, h=1):
        self.back = back
        self.w = w
        self.h = h
        self._text = _text
        l_label = Label(self.master, text=self._text, bg=self.back, width=self.w, height=self.h)
        return l_label

    def Format(self, l_label, Row=1, Column=1):
        self.Row = Row
        self.Column = Column
        l_label.grid(row=Row, column=Column)
        
app = App(thing, 'hello world')
label = app.label('this is a text boc', 'white').Format()
thing.mainloop()

您正在寻找的是方法链接。为了使其正常工作,您的函数需要返回
self

class App(object):
    def __init__(self, master, _title, back='white'):
        self.master = master
        self._title = _title
        self.back = back
        self.master.title(self._title)
        self.master.configure(background=back)
        self.w = None
        self.h = None
        self._text = None
        self.Row = None
        self.Column = None
        self.l_label = None

    def label(self, _text, back='white', w=1, h=1):
        self.back = back
        self.w = w
        self.h = h
        self._text = _text
        self.l_label = Label(self.master, text=_text, bg=back, width=w, height=h)
        return self

    def Format(self, Row=1, Column=1):
        self.Row = Row
        self.Column = Column
        self.l_label.grid(row=Row, column=Column)
        return self
注意我是如何从格式中删除
l\u标签的
,并将
标签(self.master,text=\u text,bg=back,width=w,height=h)
分配给
self.l\u标签的

那么你就可以做到:

thing = Tk()
app = App(thing, 'hello world')
label = app.label('this is a text box', 'white', 15, 15).Format()
thing.mainloop()

请缩进您定义的类
格式
作为
App
对象的方法,但它将接受
标签
作为其第一个参数。因此,如果以后不需要
label
变量,您可以将其称为
app.Format(label)
,也可以将其称为
app.Format(app.label(…)
。是的,这是有效的。我想更多的是为了找到方法链接。谢谢你的回答:)谢谢你,那正是我想要的:)。是否有任何理由在init中列出所有无值的自变量?或者只是为了让脚本更有条理?这样你就不会在
\uuuuuu init\uuuuuu
之外定义一个实例属性。这里有一个快速的答案,解释为什么我们在
\uuuuuu init\uuuuuu
中将它指定为None:实际上
app
label
都引用了
app
类的同一个实例,所以
标签
是不必要的。acw1668确实如此,我不知道我为什么这么做。谢谢,克里斯,这很有帮助:)