使用[]设置对象变量时会调用什么?

时间:2017-05-19 23:30:02

标签: python

如果我有一个dict对象说values = {'a': 'alpha', 'b': 'bravo'}

我见过用例values['a']可以获取a密钥的值。

现在我知道这是访问dict值的常规方法,但我也看到它与Tk.Scrollbar['command'] = yadayada等对象一起使用。

这种使用[ ]对象的做法是否有名称或文档?

2 个答案:

答案 0 :(得分:4)

[ ]称为索引或切片(有时称为数组/序列/映射类访问)。 x[idx] = val称为索引或切片 assigment

负责索引或切片时实例的行为的方法是:

  • __getitem__
  • __setitem__
  • __delitem__
  • (在Python-2.x中还有__getslice__,...但是从python 2.0开始不推荐使用它们 - 如果你不从使用这些的类继承,你就不应该这样做需要那些)

例如(缺少任何实际实现,只有一些print):

class Something(object):
    def __getitem__(self, item):
        print('in getitem')
    def __setitem__(self, item, newvalue):
        print('in setitem')
    def __delitem__(self, item):
        print('in delitem')

例如:

>>> sth = Something()
>>> sth[10]  
in getitem
>>> sth[10] = 100  
in setitem
>>> del sth[10]  
in delitem

答案 1 :(得分:0)

python tkinter文档中对此进行了简要描述。 Tkinter只是为了方便起见,该功能没有特定于tkinter的名称。

https://docs.python.org/3.6/library/tkinter.html#setting-options

  

选项可控制窗口小部件的颜色和边框宽度。选项可以通过三种方式设置:

     

在对象创建时,使用关键字参数

     

fred = Button(self, fg="red", bg="blue")

     

创建对象后,将选项名称视为字典索引

     

fred["fg"] = "red"
  fred["bg"] = "blue"

     

使用config()方法更新对象创建后的多个attrs

     

fred.config(fg="red", bg="blue")

有关tkinter上下文之外的更多通用信息,请参阅A python class that acts like dict