【问题标题】:calling methods of classes more efficiently更有效地调用类的方法
【发布时间】:2020-05-10 17:38:58
【问题描述】:

我的代码没有任何问题,我只是想看看是否有更短的方法

def taskcreator(first,second,third):
    first.needs()
    second.needs()
    third.needs()

如果我可以做类似的事情

def taskcreator(first,second,third):
    (first,second,third).needs()

因为我将创建更多对象,并且我希望最大限度地减少我的代码数量并使我的代码更有效率。 提前感谢您的帮助。 这是整个代码

import tkinter as tk
from tkinter import ttk

screen = tk.Tk()

class Crop:
    def __init__(self,sizename,sizevar,onvar,xvalue,yvalue):
        sizevar = tk.StringVar()
        self.sizename = sizename
        self.sizevar = sizevar
        self.onvar = onvar
        self.offvalue = 'no'
        self.cb = tk.Checkbutton(screen, text=self.sizename, variable=self.sizevar, onvalue=self.onvar, offvalue=self.offvalue)
        self.cb.deselect()
        self.cb.place(x=xvalue, y=yvalue)

    def needs(self): 
        value = self.sizevar.get()
        print(value)
        if value != 'no':
            print(self.sizename + ' has been checked')
        else:
            print(self.sizename + ' has not be checked')


def main():

    labell = tk.Label(screen, text='Enter Shoe Link').place(x=10, y=20)
    first = Crop('UK 2.5', 'twohalf', 'twohalfon', 10, 110)
    second = Crop('UK 3', 'three', 'threeon', 200, 110)
    third = Crop('UK 3.5', 'threehalf', 'threehalfon', 10, 150)
    fourth = Crop('UK 4', 'four', 'fouron', 200, 150)
    fith = Crop('UK 4.5', 'fourhalf', 'fourhalfon', 10, 190)
    sixth = Crop('UK 5', 'five', 'fiveon', 200, 190)
    seventh = Crop('UK 5.5', 'fivehalf', 'fivehalfon', 10, 230)
    eigth = Crop('UK 6', 'sixth', 'sixthon', 200, 230)
    ninth = Crop('UK 6.5', 'sixthhalf', 'sixthhalfon', 10, 270)
    tenth = Crop('UK 7', 'seven', 'sevenon', 200, 270)
    newtaskbutton = tk.Button(screen, text='Start', command=lambda: taskcreator(first,second,third))
    newtaskbutton.place(x=30,y=10)

def taskcreator(first,second,third):
    first.needs()
    second.needs()
    third.needs()
main()
screen.mainloop()

【问题讨论】:

    标签: python class oop methods tk


    【解决方案1】:

    您可以使用getattr*args 来实现:

    def taskcreator(*args):
        for arg in args:
            getattr(arg, 'needs')()
    

    *args 获取传递给函数的所有参数,并将它们全部存储为称为argstuple

    getattr 按名称获取对象的属性 - 在本例中为每个 argneeds 属性

    【讨论】:

    • 很好 - 如果它解决了您的问题,请考虑接受这个答案:stackoverflow.com/help/someone-answers
    • 你不需要使用getattr; arg.needs() 会起作用的。
    • 是的——我添加了getattr,因为我不确定只有该方法是动态的——但如果它只是needs,那么getattr是多余的。
    猜你喜欢
    • 1970-01-01
    • 2012-07-08
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    相关资源
    最近更新 更多