python的对象为什么可以用中括号访问属性?
初学python,遇到一个问题,无法理解,是这样的(是用python操作Excel的例子):
from openpyxl import load_workbookwb2 = 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支持两种,仅此而已。顺带一提,使用[]
的方式访问对象属性,有两个优势:
- 属性名可以是非法的标识符(如数字,
for/in
这些保留字),带有空格,各种特殊字符。如ws[1]
/ws['AB CD']
/ws['\\']
/ws['for']
。这些情况是不能使用.
操作符来访问的,语法上有问题。 []
这种方式可以使用变量来作为属性名,这也是.
不能做到的(.
在访问前必须知道具体的属性名)。如:
name = 'abc'print(ws[name]) # 访问属性abc
name = 'def'
print(ws[name]) # 访问属性def
以上是 python的对象为什么可以用中括号访问属性? 的全部内容, 来源链接: utcz.com/p/937694.html