我正在尝试为通用class
个实例创建Entry
。
我使用self.status
列表来更改它的值(自动更新的一部分)。
但是,一些非常奇怪的事情发生了,我找不到它的起源:
创建名为status
的函数,以便更改每个Entry
值。当该函数的名称更改为任何其他时 - 我收到此错误消息:
Traceback (most recent call last): ####updated for entire traceback ####
File "schedualer.py", line 271, in <module>
sched_entries.get_stat[r-1][c].set(sch_file[r][c])
TypeError: 'method' object is not subscriptable
任何想法为什么?
这是类代码。
class sched_entry (object):
def __init__(self,master,r1,c1,offr,offc,bg1=["yellow"]):
self.status=[]
for r in range(r1):
newrow=[]
for c in range(c1):
v=StringVar()
z=Entry(master,relief=SUNKEN,width=cell_width,bg=bg1,textvariable=v,justify='center')
z.grid(row=r+offr, column=c+offc)
newrow.append(v)
self.status.append(newrow)
def status(): ###### when change to stat(): ---> I get the error
return self.status
我在调用时收到错误:
for r in range(1,tasks_total+1): #update table with schdule.csv data
for c in range (len(sched_headers)-1):
sched_entries.stat[r-1][c].set(sch_file[r][c]) ### error when method changed to "stat"
答案 0 :(得分:5)
您有两个名为status
的东西:一个方法和一个包含列表的实例变量。一个会超越另一个;你需要不同的名字。
虽然我不确定你为什么要首先使用该方法,因为它只返回变量。你应该完全删除那个方法。
答案 1 :(得分:2)
编辑2
重要提示:您忘记将self
参数添加到类sched_entry
中定义的函数中。
python中实现方法__getitem__()
的对象,比如字典和列表,当你这么说时,问题出现了:
self.status=[]
状态是一个列表,因此它有__getitem__()
,但您也会说:
def status(self):
return self.status
并且出现问题,你是一个方法(在这种情况下是状态),没有__getitem__()
,所以,你必须重命名其中一个,你可以这样做:
def get_status(self): #here goes the self parameter
return self.status
修改
最重要的是,在看到编辑之后,忘记添加()
,这就是python实际执行方法的方法,如果你不添加它,你只需获得方法的引用,但不是执行及其结果(在您的情况下,列表状态)
sched_entries.get_status()[r-1][c].set(sch_file[r][c])