gpt4 book ai didi

python - 避免在实例变量定义中执行

转载 作者:太空宇宙 更新时间:2023-11-04 08:53:36 24 4
gpt4 key购买 nike

我有一个类,我发现自己在其中多次定义了类似的变量组,以至于我相信如果我能够在循环中这样做会更清楚,如下所示:

import tkinter as tk
from tkinter import ttk

class MyClass:
def __init__(self):
self.initializeVariables()

def initializeVariables(self):
varnames = ['a', 'b', 'c', 'd']
for var in varnames:
exec("self.bg{0} = ttk.Frame(self.Frame)".format(var))
exec("self.tb{0} = ttk.Entry(bg{0}, width=4)".format(var))
exec("self.tb{0}.grid(row=i)".format(var))

我有比这更多的元素,这个例子只是为了说明。我想知道:

  1. 有没有办法不使用 exec 函数就可以完成这个任务?我尝试使用 globals(),但没有成功
  2. 这样做不可取吗?在我看来,这使代码更易于阅读,但我不知道该领域的典型约定。

最佳答案

无需为每个小部件设置单独的对象属性。在这种情况下,在循环中创建属性会增加复杂性,而不会提供任何实际值(value)。

我建议使用列表或字典来存储引用:

def initializeVariables(self):
varnames = ['a', 'b', 'c', 'd']
self.frames = {}
self.entries = {}
for var in varnames:
self.frames[var] = ttk.Frame(...)
self.entries[var] = ttk.Entry(...)

您以后可以通过他们的名字访问他们。例如:

self.entries["c"].get()

除非您需要在代码的其他部分访问框架,否则您可以为框架使用局部变量:

for var in varnames:
frame = tk.Frame(...)
self.entries[var] = ttk.Entry(frame, ...)

关于python - 避免在实例变量定义中执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32654592/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com