python的对象为什么可以用中括号访问属性?

python的对象为什么可以用中括号访问属性?

初学python,遇到一个问题,无法理解,是这样的(是用python操作Excel的例子):

from openpyxl import load_workbook

wb2 = load_workbook("balances.xlsx")

ws = wb2.active

a1 = ws['A1'].value

print(a1)

代码中的ws是一个Worksheet对象,为什么可以通过ws['A1']的方式来得到Cell对象呢?


回答:

这是python的“魔法方法”,一个类可以实现或者修改一个操作方式,比如可以是对象可以使用len()、点操作、切片、比较大小等等,各都对应的有内置方法。比如我实现的一个拼接sql的,可以直接query[10, 20]实现拼接sql的limit,当然也可以任何形式的修改,就是个方法而已。

class QueryWrapper(object):

def __getitem__(self, item):

""" self.__getitem__(slice(x, y)) = self[x:y]"""

if isinstance(item, slice):

sql = self.sql + ' LIMIT {start}, {num}'.format(start=item.start, num=item.stop - item.start)

return fetchall_to_dict((sql, self.params), db=self.db)

具体搜索“python魔法方法”


回答:

不管是ws['A1']还是ws.A1,访问的都是ws中的A1属性,有的语言只支持一种,而Python支持两种,仅此而已。顺带一提,使用[]的方式访问对象属性,有两个优势:

  1. 属性名可以是非法的标识符(如数字,for/in这些保留字),带有空格,各种特殊字符。如ws[1]/ws['AB CD']/ws['\\']/ws['for']。这些情况是不能使用.操作符来访问的,语法上有问题。
  2. []这种方式可以使用变量来作为属性名,这也是.不能做到的(.在访问前必须知道具体的属性名)。如:

name = 'abc'

print(ws[name]) # 访问属性abc

name = 'def'

print(ws[name]) # 访问属性def

以上是 python的对象为什么可以用中括号访问属性? 的全部内容, 来源链接: utcz.com/p/937694.html

回到顶部