容器方法:
__len__(self) | 定义当被 len() 调用时的行为(返回容器中元素的个数) |
__getitem__(self, key) | 定义获取容器中指定元素的行为,相当于 self[key] |
__setitem__(self, key, value) | 定义设置容器中指定元素的行为,相当于 self[key] = value |
__delitem__(self, key) | 定义删除容器中指定元素的行为,相当于 del self[key] |
__iter__(self) | 定义当迭代容器中的元素的行为 |
__reversed__(self) | 定义当被 reversed() 调用时的行为 |
__contains__(self, item) | 定义当使用成员测试运算符(in 或 not in)时的行为 |
练习:
class C:
def __init__(self, *args):
self.value = [x for x in args]
self.count = {}.fromkeys(range(len(self.value)) , 0)
def __len__(self):
return len(self.value)
def __getitem__(self, key):
self.count[key] += 1
return self.value[key]
测试:
>>> c1 = C(1,2,3,4,5)
>>> c1[1]
2
>>> c1[0]
1
>>> c1[0]
1
>>> c1.count
{0: 2, 1: 1, 2: 0, 3: 0, 4: 0}
其中:
self.value = [x for x in args]
表示value数组将args中的所有元素,都存进来。
self.count = {}.fromkeys(range(len(self.value)) , 0)
fromkeys() 函数用于创建一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值。
dict.fromkeys(seq[, value])
- seq -- 字典键值列表。
- value -- 可选参数, 设置键序列(seq)的值。
seq = ('Google', 'Runoob', 'Taobao')
dict = dict.fromkeys(seq)
print "新字典为 : %s" % str(dict)
dict = dict.fromkeys(seq, 10)
print "新字典为 : %s" % str(dict)
输出:
新字典为 : {'Google': None, 'Taobao': None, 'Runoob': None}
新字典为 : {'Google': 10, 'Taobao': 10, 'Runoob': 10}
所以在这里,表示的是count是一个字典{},它的key是以 self.value 的长度为长度的,从1到 len 的整数数组,而每个键对应的value 是 0。