魔术方法如何增强您的Python代码
![181cd7e97b693416d30d1345d6f62f3f.png](https://i-blog.csdnimg.cn/blog_migrate/a58d9f8859efe97831196c60168ebd89.jpeg)
Image Courtesy of Vox.com
什么是魔术方法?
它们就是面向对象的Python中的一切。 您可以定义它们的特殊方法,以将"魔术"添加到您的课程中。 它们总是被双下划线包围,例如__init__。 它们也没有得到足够的记录。 Python的所有魔术方法都出现在Python文档的同一部分中,但它们分散且组织松散。 在该部分几乎找不到示例。
为了纠正人们认为缺乏魔术方法的文档,我整理了一些有关如何使用Python魔术方法的简单示例。
创建一个只接受整数和浮点数作为其值的dict对象
首先,让我们创建一个虚拟的用例。 在这种情况下,我想创建一个字典对象的类,该对象仅接受整数或浮点数作为它们的值。
例如是否有其他数据类型; 字符串,列表,元组作为值添加到我们的自定义字典对象中,将引发异常,向用户指定此自定义dict对象只能接受整数并以浮点数作为其值。
为了实现这一点,我们将使用以下魔术方法:
__int__ , __setitem__和__str__
首先,我首先创建一个名为CustomIntFloat的自定义类,然后将dict传递到参数继承列表中。 这意味着,除了在我们有选择地修改此行为的地方之外,我们创建的对象的行为将完全像字典。
然后,我创建一个__init__方法来构造CustomIntFloat dict对象。 该对象的参数列表中包含键和值,默认情况下,我将其设置为"None"类型。 原因是,如果用户创建CustomIntFloat类的对象而没有传递键或值,则将创建一个空的dict。 我创建了一个简单的条件,该条件是:如果未传递键,则默认情况下会将键参数分配给参数None,并通过使用类属性empty_dict引用CustomIntFloat对象来创建一个空dict。
接下来,如果用户指定了长度为1的键以及作为int或float类实例的相应值,则将在对象中设置键和值。
最后,在else语句中,如果用户将多个键和值指定为一个可迭代对象,则这些可迭代对象将由zip函数压缩并为变量名指定zipper。 我遍历压缩后的值,并检查该值是int还是float类型。 如果不是,则会引发自定义CustomIntFloatError异常。