Skip to main content
 首页 » 编程设计

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

2025年05月04日3252php

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

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, ...)