点运算符用于访问任何对象的属性。例如,一个复数
>>> c = 3+4j
具有(除其他外)real 和 imag 两个属性:
>>> c.real
3.0
>>> c.imag
4.0
除此之外,它还有一个方法conjugate(),它也是一个属性:
>>> c.conjugate
<built-in method conjugate of complex object at 0x7f4422d73050>
>>> c.conjugate()
(3-4j)
方括号表示法用于访问集合的成员,无论是字典还是其他映射中的键:
>>> d = {'a': 1, 'b': 2}
>>> d['a']
1
... 或在列表或字符串等序列的情况下按索引:
>>> s = ['x', 'y', 'z']
>>> s[2]
'z'
>>> t = 'Kapow!'
>>> t[3]
'o'
这些集合也分别具有属性:
>>> d.pop
<built-in method pop of dict object at 0x7f44204068c8>
>>> s.reverse
<built-in method reverse of list object at 0x7f4420454d08>
>>> t.lower
<built-in method lower of str object at 0x7f4422ce2688>
...同样,在上述情况下,这些属性恰好是方法。
虽然所有对象都有一些属性,但并非所有对象都有成员。例如,如果我们尝试使用方括号表示法来访问我们的复数 c 的成员:
>>> c[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'complex' object is not subscriptable
...我们得到一个错误(这是有道理的,因为复数没有明显的方法来拥有成员)。
可以分别使用特殊方法__getitem__() 和__getattr__() 来定义[] 和. 访问在用户定义类中的工作方式。解释如何做到这一点超出了这个问题的范围,但您可以在Python Tutorial 中阅读更多相关信息。