Python学习,小甲鱼,047魔法方法:定制序列

本文详细介绍了Python中容器方法如__len__、__getitem__等的功能及实现方式,并通过一个自定义类C的实例,展示了如何利用这些方法来增强类的行为,包括元素数量的获取、元素的读写操作及计数等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

容器方法:

__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。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值