首页
学习
活动
专区
圈层
工具
发布

python中继承内建类, 自定义列表与字典

知识回顾: 在第111期中我们学习了自定义序列(列表、字典),主要涉及到以下知识要点。...---- 本节知识视频教程 本节开始内建类的继承利用,文字讲解开始: 一、内建类学习概述 解释一下内建:就是指python编译器默认提供给我们的类库,我们可以利用这些类,来简化我们的程序,增强我们的自定义类的功能...__init__(*args) 小结使用内建类的好处: 不需要去手工实现__setitem__,__getitem__等,就可以实现内建类所拥有的功能。...三、自行实现一个字典的类 可以使用单星号,类似于实现一个列表类 class MyDict(dict): def __init__(self,*args): super()....__init__(*args) md=MyDict({"a":"老刘","b":"老张"}) print(md["a"]) 我们知道双星号代表字典,也可以使用双星号 class MyDict(dict)

1.4K20

python中深化内建类,自定义字符串类

---- 本节知识视频教程 以下开始文字讲解: 一、字典类的补充 使用双星号传入的情况的不同,以下举例: class MyDict(dict): def __init__(self,**args...__init__(**args) md=MyDict(**{"a":"老刘","b":"老张","c":"老王"}) print(md) 二、字典中的get情况 使用get的好处就是如果键不存在字典中,...使用名称[键]的方式进行获取的时候 ,虽然当键不存在的时候会报错,但是会触发__getitem__方法,触发这个方法的好处就是我们可以自定义这个方法,使得实现我们想要的功能。...新知识:使用类中的__new__魔法方法 这个方法的作用:就是在类的__init__魔法方法执行之前,就开始执行。...__new__(cls,s[:index]) 五、总结强调 1.掌握自定义类的定义与使用 2.掌握自定义字典类的注意方式 3.掌握使用自定义字符串类的方法表述 4.理解__new__方法的执行顺序位置

1.1K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    解决pyhton object is not subscriptable

    这个错误通常发生在使用字典、列表、元组等可迭代对象时,表明该对象无法进行下标操作。在本篇文章中,我们将介绍常见的导致该错误出现的原因,并提供一些解决方案。...__getitem__()​​方法后,你就可以在实例上使用下标操作符来访问相应的属性或元素。...检查对象的属性是否正确访问当你使用下标操作符访问对象的属性时,需要确保属性的名称正确无误。例如,在使用字典时,你需要使用已存在的键来访问对应的值。...__getitem__(index)​​来返回相应的元素。使用键访问属性在字典或其他类似字典的对象中,我们可以通过键来访问相应的属性或值。...总之,​​__getitem__()​​方法是一个用于支持下标操作的特殊方法,它允许我们使用下标访问对象的属性或元素。

    3.2K41

    Python进阶:自定义对象实现切片功能

    切片是 Python 中最迷人最强大最 Amazing 的语言特性(几乎没有之一),在《Python进阶:切片的误区与高级用法》中,我介绍了切片的基础用法、高级用法以及一些使用误区。...这些内容都是基于原生的序列类型(如字符串、列表、元组……),那么,我们是否可以定义自己的序列类型并让它支持切片语法呢?更进一步,我们是否可以自定义其它对象(如字典)并让它支持切片呢?...1、魔术方法:__getitem__() 想要使自定义对象支持切片语法并不难,只需要在定义类的时候给它实现魔术方法 __getitem__() 即可。所以,这里就先介绍一下这个方法。...TypeError 上例的关键点在于将字典的键值取出,并对键值的列表做切片处理,其妙处在于,不用担心索引越界和负数索引,将字典切片转换成了字典键值的切片,最终实现目的。...4、小结 本文介绍了__getitem__()魔术方法,并用于实现自定义对象(以列表类型和字典类型为例)的切片功能,希望对你有所帮助。

    1.2K50

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

    协议(Protocols)与其他编程语言中的接口很相似,它规定你哪些方法必须要定义。然而,在Python中的协议就显得不那么正式。事实上,在Python中,协议更像是一种指南。...这有点像Python极力推崇的鸭子类型【扩展阅读】鸭子类型(duck typing) 在Python中,像序列类型(如列表、元组、字符串)或映射类型(如字典)都是属于容器类型。...本节来讲定制容器,那就必须先知道,定制容器有关的一些协议。 如果说你希望定制的容器是不可变的话,你只需要定义__len__()和__getitem__()方法。...定义当使用成员测试运算符(in 或 not in)时的行为 举个例子:编写一个不可改变的自定义列表,要求记录列表中每个元素被访问的次数。...,注意不能用元素作为字典的键 #因为列表的不同下标可能有值一样的元素,但字典不能有两个相同的键 def __len__(self): return len(self.values

    45330

    Python进阶系列:Python遍历的秘密

    - 自定义类型,方法。 for循环没有你想象中的那么简单 能够看到这里的小伙伴必定已经很熟悉for循环,但你可能不知道Python在背后为你做了许多事情。...- 之前说的状态值 i ,其实就保存在迭代器中。 - 以上的步骤从代码上是看不到的。 可以看到,迭代器就是为了保存遍历状态而设定的。...- Python 在 for 循环时,发现 MyNums 虽然没实现 `__iter__` 方法,但有 `__getitem__` 方法,那么自然可以通过维护一个状态索引值 i ,不断调用 `__getitem...小结 - 我们平时经常使用的列表,元组,字典等集合,他们都是可迭代对象。 - 遍历可迭代对象时,实际是从可迭代对象获取一个迭代器进行的。...- 当自定义类型需要可迭代时,实现 `__iter__` 方法。 - 如果没有实现 `__iter__` 方法,那么实现 `__getitem__` 方法也是可以支持迭代。

    1.3K30

    Python进阶系列:Python遍历的秘密

    - 自定义类型,方法。 for循环没有你想象中的那么简单 能够看到这里的小伙伴必定已经很熟悉for循环,但你可能不知道Python在背后为你做了许多事情。...- 之前说的状态值 i ,其实就保存在迭代器中。 - 以上的步骤从代码上是看不到的。 可以看到,迭代器就是为了保存遍历状态而设定的。...- Python 在 for 循环时,发现 MyNums 虽然没实现 `__iter__` 方法,但有 `__getitem__` 方法,那么自然可以通过维护一个状态索引值 i ,不断调用 `__getitem...小结 - 我们平时经常使用的列表,元组,字典等集合,他们都是可迭代对象。 - 遍历可迭代对象时,实际是从可迭代对象获取一个迭代器进行的。...- 当自定义类型需要可迭代时,实现 `__iter__` 方法。 - 如果没有实现 `__iter__` 方法,那么实现 `__getitem__` 方法也是可以支持迭代。

    80420

    python 数据模型

    块) 一摞 Python 风格的纸牌 接下来尝试自定义一个类,并实现两个特殊方法:__getitem__ 和 __len__ ,看看实现它们后,可以对自定义的类示例实现哪些操作。...__init__外,还实现了几个特殊方法: __add__: 加法运算符; __bool__ :用于判断是否真假,也就是在调用bool() 方法;默认情况下是自定义类的实例总是被认为是真的,但如果实现了...__ :主要是在 str() 和 print() 方法中会调用该方法,它返回的字符串会对终端用户更加友好; 如果只想实现其中一个方法,__repr__ 是更好的选择,因为默认会调用 __repr__...而在 python 的内置类型,比如列表 list、字符串 str、字典 dict 等查询数量是非常常见的操作。 这种处理方式实际上是在保持内置类型的效率和保证语言的一致性之间找到一个平衡点。...小结 本文介绍了两个代码例子,说明了在自定义类的时候,实现特殊方法,可以实现和内置类型(比如列表、字典、字符串等)一样的操作,包括实现迭代、运算符重载、打印类实例对象等,然后还根据是否和运算符相关将特殊方法分为两类

    1.3K20

    python中自定义序列的实现

    序列的各个类型对应使用符号: 字典{key:value} 元组() 列表[ ] 字符串”” ‘’ 二、序列的原理 以下开始以字典举例,其它的序列类似。...我们在调用序列的时候,其实一些操作对应魔法方法: len获取长度,对应__len__; 增加字典的键值对通过字典名称[键]=值,对应__setitem__; 获取字典的值,使用字典名称[键] ,对应__...getitem__; 删除字典中某个键值对,使用del 字典名称[键],对应__delitem__ 三、自定义类的序列 通过序列的各项操作与魔法方法的对应关键,我们可以自定义一个自己的序列。...四、总结强调 1.掌握序列的实现原理 2.掌握类的自定义序列方法 __len__ __setitem__ __getitem__ __delitem__ 本节源码: class MyDict:...key,"=",value) #模拟序列,获取字典 def __getitem__(self, item): return self.ljydic[item] #

    91420

    理解 Python 编程中 *args 与 **kwargs 的妙用

    这意味着,通过使用 *args,你可以传递任意数量的位置参数给函数。 工作原理:在函数内部,args 实际上是一个元组,它包含了所有传递给函数的位置参数。...工作原理:在函数内部,kwargs 实际上是一个字典,它包含了所有传递给函数的关键字参数。...双星号(**)是以新字典形式打包实参中的所有关键字参数并将新字典赋值给双星号后的变量 kwargs,即收集关键字参数。...当你直接传递一个列表或字典给一个函数时,如果函数内部有修改操作,那么原始的列表或字典数据会被改变。这是因为列表和字典是可变类型,当你直接传递它们时,实际上是传递了它们在内存中的地址。...函数可以通过这个地址来修改原始的列表或字典数据。当你用星号或双星号把一个列表或字典传给函数时,即使在函数里面对这些参数进行了修改,原来的列表或字典是不会改变的。

    5.9K00

    Python迭代和解析(4):自定义迭代

    解析、迭代和生成系列文章:https://www.cnblogs.com/f-ck-need-u/p/9832640.html ---- 本文介绍如何自定义迭代器,涉及到类的运算符重载,包括__getitem...索引迭代方式 索引取值和分片取值 元组、列表、字典、集合、字符串都支持索引取值操作和分片操作。...__索引迭代 __getitem__重载了索引取值和分片操作,实际上它也能重载索引的迭代操作。...此外,__getitem__重载使得它可以被迭代,也就是它通过数值索引的方式让这个对象变成可迭代对象,所有迭代工具(比如zip/map/for/in)都可以对这个对象进行迭代操作。...当同时定义了__iter__和__getitem__的时候,iter()函数优先选择__iter__,只有在__iter__不存在的时候才会选择__getitem__。

    78300

    Python学习手册之内部方法、操作符重

    这意味着可以自定义类的操作符,允许在这些类上使用加减乘除等运算符。 下面代码实现了__call__方法的对象,相当于重载了 (),可以实现调用功能。 实现非波纳契数列的类。...#把一个类做成一个字典 class Foo(): def __init__(self): self.data = {} def __getitem__(self, key): print(...__getitem__ 还可以根据表达式返回字典中的 key,__setitem__ 设置 key 对应的 value 值。...在此之前,调用类的 __new__ 方法,这通常仅在特殊情况下会被重写。在此以后,该对象就可以使用了。 现在,其他代码可以通过调用对象上的函数或访问其属性与对象进行交互。最后它使用完毕并可被销毁。...del 语句调用对象的方法 __del__。 在不再需要对象是删除对象的过程称为垃圾收集。对象的引用计数在分配新名称或放在容器 (列表、元组或字典) 中时会增加。

    55410

    Python进阶:全面解读高级特性之切片!

    前两节内容都是基于原生的序列类型(如字符串、列表、元组……),那么,我们是否可以定义自己的序列类型并让它支持切片语法呢?更进一步,我们是否可以自定义其它对象(如字典)并让它支持切片呢?...3.3、自定义字典实现切片功能 切片是序列类型的特性,所以在上例中,我们不需要写切片的具体实现逻辑。但是,对于其它非序列类型的自定义对象,就得自己实现切片逻辑。...借助这两个概念,我们说,可迭代对象就是能被“它遍历”的对象,而迭代器是在此基础上,还能做到“自遍历”的对象。...4.2、迭代器切片 前面提到了“一同两不同”,最后的不同是,普通可迭代对象在转化成迭代器的过程中会丢失一些属性,其中关键的属性是 __getitem__ 。...首先,迭代器使用的是消耗型的遍历,这意味着它充满不确定性,即其长度与索引键值对是动态衰减的,所以很难 get 到它的 item ,也就不再需要 __getitem__ 属性了。

    1.3K40

    Python里最神秘的一个魔法函数

    另外一个典型的使用例子是collections.Counter,它也是 dict 的子类,在取未被统计的 key 时,返回计数 0: 2、神出鬼没的__missing__() 由上可知,__missing...这是因为它并非内置类型的必要属性,并没有在字典基类中被预先定义。...__missing__ 也就是说,理论上 object 类中会预定义__missing__,其文档证明了这一点,然而实际上它并没有被定义!文档与现实出现了偏差!...__missing__() 是魔术方法的“二等公民”,它没有独立的调用入口,只能被动地由 __getitem__() 调用,即__missing__() 依赖于__getitem__()。...为了让字典类型有更强大的表现(或者说让__getitem__()作出 get() 那样的表现),Python 让字典的子类可以定义__missing__(),供__getitem__()查找调用。

    66050

    pandas作者当年遇到了什么麻烦,才设计出如此糟糕的警告机制

    有一些无脑的教程会说,你得用 copy: 无缘无故为啥要复制一整份数据。难道每次赋值都要 copy ? 我在 pandas 专栏中也详细讲解了其中的原理,主要是驳斥了网络上一些无脑说法。...因为本文涉及的是 python 的非初级知识点 ---- 从零开始 假设我们是 pandas 的作者,现在要设计数据表(DataFrame)的定义: 名字叫 MyFrame 初始化的时候需要传入字典数据...看看怎么使用 实例化的时候,传入字典 筛选是数据表常规操作,添加一个 where 的函数: 功能实现不是本文重点,这里借用 pandas 实现 行15:重点是,我们要返回一个全新的 MyFrame...行2:语法 对象[切片范围] 这不也是一种数据筛选的方式吗?我们自定义的类也能有这样子的语法支持吗? ---- 魔法方法 从对象的角度来说,它只不过是数据与函数的结合体。...首先,在对象初始化的时候,给一个标志属性: 行11:标记一个对象是否为影子对象,就类似之前例子中的 f2 在 __getitem__ 中,返回全新对象之前,修改新对象的 _shadow 属性: 行36

    49220

    深度剖析Python字典和集合

    “字典这个数据结构活跃在所有Python程序的背后,即便你的源码里并没有直接用到它”,摘抄自《代码之美》第18章Python的字典类:如何打造全能战士。字典是Python语言的基石!...在函数的关键字参数、实例的属性和模块的命名空间都能够看到它的身影,我们自己写代码时也经常会用到。 “集合”这个概念在Python中算是比较年轻的,使用率也比较低,我只在元素去重和求差集并集时使用过。...它比dict更适合继承的原因是,后者有时会在某些方法的实现上走一些捷径,导致我们不得不在它的子类中重写这些方法,而UserDict就不需要。...自定义类型实际上调用的是自定义的__hash__。...散列表与set 集合的散列表里存放的只有元素的引用(就像在字典里只存放键而没有相应的值)。上一节讨论的散列表与dict的内容,对集合来说几乎都是适用的。

    2.1K00

    定制类和黑魔法

    黑魔法   优化内存     我们知道类中有__dict__属性,它包含了当前类中的所有属性和方法;类的每个对象也有各自的__dict__属性,它包含了对应的对象中的属性。...2.引子:使用点来访问属性本质上就是在访问类或者对象的__dict__属性字典(类的字典是共享的,而每个实例的是独立的)中的内容。     ...而在序列(字符串、列表、元组)通过索引或字典通过键操作其元素时也会自动触发一些内置方法:__getitem__、__setitem__、__delitem__。...__getitem__:在通过索引或键取出元素或属性时触发。   __setitem__:在通过索引或键设置元素或属性时触发。   __delitem__:在通过索引或键删除元素或属性时触发。...,因为我们可以完全的去自定义子类,子类中可以增加父类没有的功能,对于继承了已有对象类型的子类,我们在操作__getitem__、__setitem__、delitem__属性时,必然会跟__dict__

    87610

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

    在python中,像序列类型(如列表,元组和字符串)或映射类型(如字典)都属于容器类型。...接下来重点要实现的是__next__()魔法方法,因为它决定了迭代的规则。...3、shuffle,一般在训练数据中会采用。4、collate_fn,是用来处理不同情况下的输入dataset的封装,一般采用默认即可,除非你自定义的数据读取输出非常少见。...在threading.Thread的args参数中,第一个参数in_data就是一个进程的数据,一个进程中不同线程的数据也是通过队列来维护的,这里采用的是Python的queue模块来初始化得到一个队列...while语句一起看,因为self.reorder_dict字典的更新是在最后的while语句中),如果之前已经读取过了,就根据这个index从reorder_dict字典中弹出对应的数据。

    1.3K10

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

    我们通常接触的数据结构,如序列(列表、元组和字符串)还有字典等,都支持迭代操作,也可称为可迭代对象。 那什么是迭代器(Iterator)呢?...简而言之,迭代器就是一种可以被遍历的容器类对象,但它又比较特别,它需要遵循迭代器协议,那什么又是迭代器协议呢?...__() 方法来获取数据的 Dataset,它表示从(可能是非整数)索引/关键字到数据样本的映射。...· 它保留数据结构,例如,如果每个样本都是 dict,则输出具有相同键集但批处理过的张量作为值的字典(或 list,当数据类型不能转换的时候)。...自定义 collate_fn 可用于自定义排序规则,例如,将顺序数据填充到批处理的最大长度,添加对自定义数据类型的支持等。 5.

    1.3K10

    迭代和对象的可迭代性

    可迭代与迭代器的区别 2. 应用 2.1. 字典dict的迭代 2.2. 字符串str的迭代 3. 判断对象的可迭代性和获得获取迭代索引 3.1. 判断对象的可迭代性 3.2....可迭代与迭代器的区别 可迭代: 在Python中如果一个对象有__iter__( )方法或__getitem__( )方法,则称这个对象是可迭代的(Iterable);其中__iter__( )方法的作用是让对象可以用...for ... in循环遍历,__getitem__( )方法是让对象可以通过“实例名[index]”的方式访问实例中的元素。...当然因为Python的**“鸭子类型”**,我们自定义的类中只要实现了__iter__( )方法或__getitem__( )方法,也是可迭代的。...判断对象的可迭代性 由1.2节可知,如果对象类中含有__iter__( )方法或__getitem__( )方法,则称这个对象是可迭代的(Iterable),那么如何判断呢?

    1.8K20
    领券