这期我们来聊聊和class建立有关的魔术方法。
是 Python 3.6 新增的一个特殊方法,用于定义一个类(基类)被继承时所执行的逻辑。当一个类被定义为另一个类(基类)的子类时,它会自动调用 方法。
方法定义在父类中,用于自定义子类的创建过程,可以控制子类的行为。在子类定义时, 方法会被自动调用,参数为子类本身。可以通过重载 方法来实现自定义子类的行为。
下面是一个简单的例子,演示了如何使用 方法来实现自定义子类的行为:
输出结果为:
可以看到以为基类建立衍生类,可以看到衍生类的和属性就被赋值了。
是 Python 3.6 新增的一个特殊方法,用于在类定义时自动设置属性的名称。它是在数据描述符的定义中使用的,用于设置描述符属性的名称。
当定义一个数据描述符时,它通常是作为类中的一个属性来定义的,而属性名就是描述符的名称。在类定义中使用描述符时,Python 会自动调用描述符的 方法,并将属性名作为参数传递进去。这样,描述符就可以保存属性名并在需要的时候使用。
下面是一个简单的例子,演示了如何在一个数据描述符中使用 方法来保存属性名:
输出结果为:
在上面的例子中,我们定义了一个数据描述符 ,其中的 方法会在类定义时自动调用,并保存属性名。然后我们定义了一个类 ,并将 作为它的属性。当 被设置为 的属性时, 方法会自动保存属性名到 的 属性中。
总之, 方法可以让开发者在定义数据描述符时自动保存属性名,从而在需要的时候可以方便地使用。它通常用于实现一些高级的数据描述符,例如访问控制、属性计算等。
是 Python 3.5 新增的一个特殊方法,用于在定义泛型类型时实现类型参数的协变或逆变。它是用于泛型类型中的类方法或静态方法的。
输出结果为:
在 Python 中,泛型类型可以使用类型变量来代替具体的类型,例如 ,其中 是一个类型变量,表示列表中的元素类型。在泛型类型中,有时需要使用类型参数的子类型或超类型,这时可以使用 方法来实现。
具体地说, 方法会在访问泛型类型的类方法或静态方法时自动调用,并传入泛型类型的参数列表。开发者可以在这个方法中根据参数列表来实现类型参数的协变或逆变。
下面是一个简单的例子,演示了如何在泛型类型中使用 方法来实现类型参数的协变:
在上面的例子中,我们定义了一个泛型类型 ,其中包含一个类方法 和一个静态方法 。当访问这些方法时,Python 会自动调用 方法,并传入类型参数列表。
在 方法中,我们根据类型参数 来定义一个新的泛型类型 ,它的 方法将输入的可迭代对象转换成 类型的元素,而 方法将输入的对象转换成 类型的对象。这样, 就可以使用 和 方法,并将所有输入转换成整数类型。
总之, 方法可以让开发者在泛型类型中实现类型参数的协变或逆变,从而更加灵活地处理类型。它通常用于实现一些高级的泛型类型,例如函数式编程中的 Functor、Monad 等。
不是一个标准的魔术方法,它是 Python 3.7 新增的一个类属性。
在 Python 中,类的继承关系是通过 Method Resolution Order (MRO) 来决定的。 类属性允许开发者指定一个自定义的 MRO 列表,以覆盖默认的 MRO 计算规则。
类属性应该是一个元组,每个元素都是一个类。这些类将按照元组的顺序排列,并添加到当前类的 MRO 中。具体来说,Python 会按照以下顺序计算 MRO:
- 查找当前类的 类属性,并将其中的类添加到 MRO 中。
- 根据 C3 算法(en.wikipedia.org/wiki/C3_lin… MRO,将其添加到 MRO 中。
举个例子,如果一个类定义了 ,那么 将会在该类的所有基类之前被加入到 MRO 中。这个特性对于需要在类继承关系中插入额外的基类时非常有用。
下面是一个使用 属性的例子:
输出结果为:
在上面的例子中,定义了一个元类 ,并在其中定义了 方法,将 的 MRO 序列扩展为 。因此, 继承了 类,成为了一个字典对象。 假如我们把上述代码 返回值修改为以下,则会得到不同的结果。
输出结果为:
更多详情参考:peps.python.org/pep-0560/
方法是 Python 3 中新引入的一个元类方法,它在类定义之前被调用,用于创建用于存储类属性的字典。该方法必须返回一个字典对象,用于存储类属性。
具体来说,当定义一个新的类时,Python 首先会寻找元类并调用它的 方法。该方法返回的字典会被用来存储类属性。然后 Python 会解析类定义,将属性添加到字典中。
下面是一个简单的示例,演示如何使用 方法:
输出结果为:
在这个例子中,我们定义了一个元类 ,并重载了它的 方法,用于创建一个 OrderedDict 对象作为类属性的字典。然后,我们定义一个 类,并使用 作为它的元类。在 中,我们定义了三个类属性 、 和 。由于我们使用了 对象作为 的字典,因此这些属性将按照定义的顺序存储在字典中。最后,我们打印了 ,可以看到这个字典按照我们的期望存储了类属性,并且保持了它们的顺序。
这两个方法一般也是定义在元类里的。
是一个特殊方法,用于自定义对象是否为某个类或其子类的实例。如果定义了这个方法,那么在使用 函数检查对象是否为某个类或其子类的实例时,会调用这个方法,返回值为 或 。
是一个特殊方法,用于自定义对象是否为某个类的子类。如果定义了这个方法,那么在使用 函数检查对象是否为某个类的子类时,会调用这个方法,返回值为 或 。
下面是一个简单的示例:
输出结果为:
今天介绍的魔术方法都比较偏,我们在日常开发的时候用到的机会也比较少。
当下这个大数据时代不掌握一门编程语言怎么跟的上脚本呢?当下最火的编程语言Python前景一片光明!如果你也想跟上时代提升自己那么请看一下.
感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。
👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
工具都帮大家整理好了,安装就可直接上手!
三、最新Python学习笔记
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、Python视频合集
观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试宝典
简历模板

若有侵权,请联系删除
转载请注明来自石家庄天鲲化工设备有限公司 ,本文标题:《【python】魔术方法大全(四)——类构建篇》
还没有评论,来说两句吧...