python - 更有效地调用类的方法
问题描述
我的代码没有任何问题我只是想看看是否有更短的方法
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()
解决方案
您可以使用getattr
and*args
来实现这一点:
def taskcreator(*args):
for arg in args:
getattr(arg, 'needs')()
*args
获取传递给函数的所有参数,并将它们全部存储为tuple
被调用的args
.
getattr
按名称获取对象的属性 - 在这种情况下needs
,每个对象的属性arg
推荐阅读
- javascript - 使用最新的 terser-webpack-plugin 和 Webpack5
- reactjs - 组件渲染问题(长读)
- django - 有没有办法计算这么多数据并仍然为响应式网站提供服务?
- html - 这是在表中设置单个元素样式的正确语法吗?
- python-3.x - VS Code Python 交互窗口无法导入`rasterio`
- discord.py - 消息无限重复——Discord.py
- python - 如何将列表理解与非理解项目混合在一起?
- python - 从二维二进制矩阵中提取直线
- python - 使用计算编号进行下一次计算
- swiftui - swiftui 2.0 图片库 onTapgesture 只显示数组中的第一张图片