首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么在修改了__len__(self)之后也不能改变len()的行为呢?

在Python中,__len__()方法是用来返回对象的长度的特殊方法。当我们使用内置函数len()来获取对象的长度时,实际上是调用了该对象的__len__()方法。但是,修改了__len__()方法并不会改变len()函数的行为,这是因为len()函数是在Python的内置函数库中定义的,其行为是固定的,无法通过修改单个对象的__len__()方法来改变。

len()函数的行为是根据对象的类型来决定的,不同的对象类型有不同的实现方式。例如,对于字符串、列表、元组等内置类型,len()函数会调用其内部的计数器或长度属性来获取长度;对于自定义的类对象,len()函数需要通过在类中定义__len__()方法来实现。无论我们如何修改一个类对象的__len__()方法,len()函数在调用时都会按照其原始的实现方式来获取长度。

需要注意的是,虽然无法通过修改__len__()方法来改变len()函数的行为,但我们可以通过继承内置类型并重写其__len__()方法来自定义对象的长度行为。

如果想要详细了解len()函数和__len__()方法的相关知识,可以参考腾讯云开发者手册中的相关文档:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

课时47:魔法方法:定制序列

本节来讲定制容器,那就必须先知道,定制容器有关一些协议。 如果说你希望定制容器是不可变的话,你只需要定义__len__()和__getitem__()方法。...__len__(self)        定义当被 len() 调用时行为(返回容器中元素个数) __getitem__(self, key)...定义当使用成员测试运算符(in 或 not in)时行为 举个例子:编写一个不可改变自定义列表,要求记录列表中每个元素被访问次数。...= {}.fromkeys(range(len(self.values)), 0) #这里使用列表下标作为字典键,注意不能用元素作为字典键 #因为列表不同下标可能有值一样元素...,但字典不能有两个相同键 def __len__(self): return len(self.values) def __getitem__(self, key)

35330
  • PyTorch 小课堂开课啦!带你解析数据处理全流程(一)

    简单捋一捋思路之后,就从 torch.utils.data 数据处理模块开始,一步步重新学习 PyTorch 一些源码模块解析,希望能让大家重新认识已经不陌生 PyTorch 这个小伙伴。...和 DataLoader 这三个类中都会用到包括 __len__(self),__getitem__(self) 和 __iter__(self) 抽象类魔法方法。...· __len__(self):定义当被 len() 函数调用时行为,一般返回迭代器中元素个数。...· __getitem__(self):定义获取容器中指定元素时行为,相当于 self[key] ,即允许类对象拥有索引操作。 · __iter__(self):定义当迭代容器中元素时行为。...我们通常接触数据结构,如序列(列表、元组和字符串)还有字典等,都支持迭代操作,可称为可迭代对象。 那什么是迭代器(Iterator)

    1K10

    Python教程(23)——Python类中常用特殊成员

    这些特殊成员定义中具有特殊语法和功能,用于实现对象特定行为和操作。 特殊方法一般由Python解释器调用,无需手动调用。...通过类中定义这些特殊方法,可以改变对象默认行为,使其具备更多功能和操作。特殊方法提供了一种更加Pythonic面向对象编程方式,可以让代码更加简洁和易读。...__len__ __len__ 用于定义对象长度。它主要被用于内置函数 len() 操作,用于返回一个对象长度或元素个数。...__len__ 方法格式通常如下: def __len__(self): # 返回对象长度或元素个数 __len__ 方法中,self 代表对象本身。... __len__ 方法中,我们使用内置函数 len() 计算了 data 列表长度,并返回该长度。

    12710

    pytorch源码分析之torch.utils.data.Dataset类和torch.utils.data.DataLoader类

    torch.utils.data.Dataset和torch.utils.data.DataLoader这两个类中会用到python抽象类魔法方法,包括__len__(self),__getitem...__(self)和__iter__(self) __len__(self) 定义当被len()函数调用时行为(返回容器中元素个数) __getitem__(self)定义获取容器中指定元素行为,相当于...__iter__(self)定义当迭代容器中元素行为 下面通过介绍python定制容器方式来介绍__len__(self),__getitem__(self)两种方法。....fromkeys(range(len(self.values)),0) # 这里使用列表下标作为字典键,注意不能用元素作为字典键 # 因为列表不同下标可能有值一样元素,但字典不能有两个相同键...,并且需要重写__len__和__getitem__。

    96010

    不知道鸭子类型就当没学过python

    魔法函数好处多多 魔法函数是python中特殊方法,那你可以理解为,这些特殊方法是一些定义好回调行为, 所以魔法函数不能自定义,定义之后不需要调用,若你将这些行为用到自己类中,那么当触发这个回调后就会调用这个方法...__:Python中,我们经常会使用len()函数获取一个对象长度,实际上在其内部会自动调用该对象__len__()方法 tips: python内置类型(int list dict)底层均为c语言写..., 需要用cython解释器去执行,所以长度一开始分配内存空间时候就已经确定了,而不是去遍历,所以用魔法函数len效率高 栗子: class WordNums(): def __init__...(self, *args): self.word = args def __len__(self): print("调用了__len__方法") return len(self.word...__getitem__:在被迭代时会传入当前循环变量然后进行索引 __setitem__:这个方法应该以与键相关联方式(类似字典方式)存储值,以便之后能够使用__setitem__来获取(即key

    53820

    Python - 面向对象编程 - 魔术方法(双下划线方法)

    什么是魔术方法 Python中,所有以 __ 双下划线包起来方法,都统称为 Magic Method 魔术方法,叫双下划线方法 有哪些重要魔术方法?...__len__ len() 调用对象会返回 __len__ 方法 return 值,必须返回 integer class A: def __len__(self): return...__call__(a, b) __len__(self) 定义当被 len() 调用时行为 __repr__(self) 定义当被 repr() 调用时行为 __str__(self)...定义当描述符值被改变行为 __delete__(self, instance) 定义当描述符值被删除时行为 比较操作符 __lt__(self, other) 定义小于号行为...一般被用来处理异常,清除工作或者做一些代码块执行完毕之后日常工作 容器类型 __len__(self) 定义当被 len() 调用时行为(返回容器中元素个数) __getitem__

    28330

    什么是魔术方法(magic methods)

    这些方法类定义中被调用,用于实现特定功能或行为。魔术方法被称为特殊方法或双下方法。魔术方法Python中起着非常重要作用,它们可以帮助我们自定义类行为,使其更具有灵活性和可扩展性。...通过实现魔术方法,我们可以改变实例化、属性访问、运算符重载等行为,从而实现自定义逻辑。...当我们对一个对象使用内置len函数时,会自动调用对象__len__方法。...它们类定义中被调用,用于实现特定功能或行为。...通过实现这些魔术方法,我们可以自定义类行为,使其更具有灵活性和可扩展性。魔术方法使得我们可以改变实例化、属性访问、运算符重载等行为,从而实现自定义逻辑。

    37720

    Python入门之面向对象编程(三)Python类魔术方法

    ,重新定义后则可以定制打印内容 __new__ 创建实例时自动调用 __del__ 对象在内存中被释放时触发(后面不设置例子) __len__ 定义 len(实例) 返回内容,比如字符串类就定义是字符串字符个数...,当然可以改成其他 __eq__ 改变==运算符行为,定义实例使用==number时,是拿实例什么与number相比 和eq类似的还有ne lt le gt ge 还有一些用于实例之间数值计算...__add__ __abs__等方法,定义方式和__eq__差不多,这些应用典型类就是数值类,定义这些其实定义了某些运算符行为,比如__iadd__定义了+=行为一样。...__repr__ = __str__ # 这样简单赋值即可 def __len__(self): # 定义len函数返回结果 return len(self.name...) 实现 __iter__ __next__ 方法 如果只实现__iter__则这个方法返回值必须是一个迭代器 可以__iter__返回一个self,再定义__next__方法,接受self为参数,

    73640

    Python 开发者不得不知魔术方法(Magic Method)

    自定义容器magic method 下面细致了解下定义容器可能用到魔术方法。首先,实现不可变容器的话,你只能定义 __len__ 和 __getitem__ (下面会讲更多)。...__len__(self) 返回容器长度。对于可变和不可变容器协议,这都是其中一部分。 __getitem__(self, key) 定义当某一项被访问时,使用self[key]所产生行为。...= [] else: self.values = values def __len__(self): return len(self.values...反射 你可以控制怎么使用内置函数sisinstance()和issubclass()方法 反射定义魔术方法....当然可以改变其它对象。描述器并不是独立。相反,它意味着被一个所有者类持有。当创建面向对象数据库或者类,里面含有相互依赖属相时,描述器将会非常有用。

    95470

    非常全通俗易懂 Python 魔法方法指南

    2.1 比较操作符 Python包含了一系列魔法方法,用于实现对象之间直接比较,而不需要采用方法调用。同样可以重载Python默认比较方法,改变它们行为。...协议类似某些语言中接口,里面包含是一些必须实现方法。Python中,协议完全是非正式不需要显式声明,事实上,它们更像是一种参考标准。 为什么我们要讲协议?...因为Python中实现自定义容器类型需要用到一些协议。首先,不可变容器类型有如下协议:想实现一个不可变容器,你需要定义 __len__ 和 __getitem__ (后面会具体说明)。...5.1 容器背后魔法方法 __len__(self) 返回容器长度,可变和不可变类型都需要实现。...: self.values = values def __len__(self): return len(self.values) def _

    1.9K32

    Sampler类与4种采样方式

    ))) def __len__(self): return len(self.data_source)顺序采样类并没有定义过多方法,其中初始化方法仅仅需要一个Dataset类对象作为参数...前述几种方法都只需要self.data_source实现了__len__()方法,因为这几种方法都仅仅使用了lenself.data_source)函数。..._num_samples # 返回数据集长度 def __len__(self): return self.num_samples最重要是__iter__()方法,定义了核心索引生成行为...return len(self.indices)上述代码中__len__()作用与前面几个类相同,依旧是返回数据集长度,区别在于__iter__()返回并不是随机数序列,而是通过随机数序列作为indices...: # 不进行剔除时,数据长度就是采样器索引长度 if self.drop_last: return len(self.sampler) // self.batch_size

    98620

    语义分割代码一步步实现_语义分割应用

    二、代码实现思路 代码实现思路其实就是对上面文件诠释了。 1、图像数据 没有图像数据啥做不了,所以我们首先要从数据说起。 针对数据来讲,有哪些需要注意事项?...2、将本地图像数据集转化为pytorchDataSet 本地图像数据执行完第一步之后,我们便来到了这一步。 为什么要将本地图像数据集转化为pytorchDataSet?...__init__() def __len__(self): return len(img_list) def __getitem__(self, idx):...test用来测试,为什么要说这个,这是因为这里有很多细节东西需要说一下。...举个例子: img操作基本为: 输入灰度图(二维[W, H])–>Resize成[1, H, W](为什么要将其resize成3维,这是因为net输入必须是4维DataLoader中加上BatchSize

    87520
    领券