python3:魔法函数__len__ ,__getitem_

魔法函数是可以提高性能的, 应该直接走的解释器。里面做了好多优化。废话少说,先来段代码再做解释。

class Person:
    def __init__(self,persion_list):
        self.persion_list=persion_list
    def __getitem__(self, item):
        return self.persion_list[item]
    def __len__(self):
        return len(self.persion_list)
body=Person(["Xiuwu","Adny","Maggie"])

for i in body:
    print (i)
print(body[0])

print(len(body))

打印的结果如下:

C:\Users\tengfei\PycharmProjects\test1\venv\Scripts\python.exe C:/Users/tengfei/PycharmProjects/test1/alert.py
Xiuwu
Adny
Maggie
Xiuwu
3

Process finished with exit code 0

魔法函数 是 独立的函数,不依赖任何类,但是任何类都可以 直接调用,加强类的使用,,格式为 双下划线开头和结尾, 系统会自认为直接调用,不需要写调用方法, 比如 def getitem (self,item):

  1. return self.person_list[item] 这个 魔法函数如果放在 类里面, 会直接找 Person属性, item会自增加 直到找不到报错结束, 使用的时候 直接 类的实例 做for循环,就可以了, 不需要用 实例再调用属性,因为魔法函数已经替你完成了这一步。 运用好魔法函数,可以节省时间,代码明了。
    2.如果我注销下边的函数, 再去调用len(body),看看效果如何:
 #def __len__(self):
    #    return len(self.persion_list)
报错如下:
Adny
Maggie
Xiuwu
Traceback (most recent call last):
  File "C:/Users/tengfei/PycharmProjects/test1/alert.py", line 14, in <module>
    print(len(body))
TypeError: object of type 'Person' has no len()

通过以上报错很明显是 ,Person 这个类的对象那个没有对应的方法,len() 实际只是适合dict,list 等形式,这个适合如果还是想直接区,必须重写len 的方法, 如上边的代码,直接返回len(self.person_list).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值