【问题标题】:What is it called when using [ ] to set object variables?使用 [ ] 设置对象变量时叫什么?
【发布时间】:2017-10-20 04:33:14
【问题描述】:

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

我见过一些用例,可以使用values['a'] 来获取a 键的值。

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

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

【问题讨论】:

标签: python


【解决方案1】:

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

负责实例在索引或切片时如何操作的方法是:

  • __getitem__,
  • __setitem__
  • __delitem__
  • (在 Python-2.x 中也有 __getslice__,...但自 python 2.0 起已弃用 - 如果您不从使用这些的类继承,则不需要这些)

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

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

【讨论】:

  • __getslice__ 自 Python 2.0 以来已被弃用,但它仍被内置类型使用,因此在继承这些类型时需要覆盖它。
  • @chepner 没错。我只是想提一下__getslice__ 而没有详细说明——所以我没有仔细检查我在那里写的内容。我更新了答案。
  • 除非使用切片语法(即[] 中至少有一个:),否则不称为“切片”。
【解决方案2】:

这在 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() 方法更新多个属性

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-19
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多