python中类的魔术方法

目的:学习python中class的magic methods,提高编程效率。

环境:ubuntu 16.4   python 3.5.2

在学习class是一定会接触到它的magic methods,比如常用__init__,形式都是前后有双下划线。除了这个必须的,还有其他有用的方法,下面大概的介绍一下。

运算魔法方法:

__add__ 用作 +

__sub__ 用作 -

__mul__ 用作 *

__truediv__用作/

__floordiv__用作//

__mod__用作%

__pow__用作**

__and__用作&

__xor__用作^

__or__用作|

举例说明:

class SpecialString:
    def __init__(self, cont):
        self.cont = cont
        
    def __truediv__(self, other):
        line = ‘=‘ * len(other.cont)
        return rn.join([self.cont, line, other.cont])
     
spam = SpecialString(‘spam‘)
hello = SpecialString(‘Helo world!‘)
print(spam/hello)

# 结果
>>>
spam
============
Hello world!
>>>

x + y 相当于 x.__add__(y), 但是如果x没有__add__方法,且x和y是不同的类,那么就会检查y有没有__radd__,有则表示为y.__radd__(x),没有则出现TypeError,所有的megic methods都有r methods。

比较魔法方法:

__lt__  用作 <

__le__ 用作 <=

__eq__ 用作 ==

__ne__ 用作 !=

__gt__ 用作 >

__ge__ 用作 >=

如果__ne__不存在,则返回__eq__的方向。

举例说明:

class SpecialString:
    def __init__(self, cont):
        self.cont = cont
        
    def __gt__(self, other):
        for index in range(len(other.cont) + 1):
            result = other.cont[:index] + ‘>‘ + self.cont
            result += ‘>‘ + other.cont[index:]
            print(result)
        
spam = SpecialString(‘spam‘)
eggs = SpecialString(‘eggs‘)
spam > eggs

# result

>>>
>spam>eggs
e>spam>ggs
eg>spam>gs
egg>spam>s
eggs>spam
>>>

类似容器的魔术方法:
__len__用作 len()
__getitem__ 用作进行索引
__setitem__ 用作分配索引
__delitem__ 用作删除索引
__iter__ 用作迭代对象
__contains__用作in

举例说明:
class VagueList:
    def __init__(self, cont):
        self.cont = cont
        
    def __getitem__(self, index):
        return self.cont[index + random.randint(-1, 1)]
    
    def __len__(self):
        return random.randint(0, len(self.cont) * 2)
        
vague_list = VagueList([‘A‘, ‘B‘, ‘C‘, ‘D‘, ‘E‘])
print(len(vague_list))
print(len(vague_list))
print(vague_list[2])
print(vague_list[2])

#result
>>>
2
2
C
D
>>>

参考文档来源:sololearn

时间: 2024-08-02 18:50:23

python中类的魔术方法的相关文章

Python 类的魔术方法

Python中类的魔术方法 在Python中以两个下划线开头的方法,__init__.__str__.__doc__.__new__等,被称为"魔术方法"(Magic methods).魔术方法在类或对象的某些事件出发后会自动执行,如果希望根据自己的程序定制自己特殊功能的类,那么就需要对这些方法进行重写. 注意:Python 将所有以 __(两个下划线)开头的类方法保留为魔术方法.所以在定义类方法时,除了上述魔术方法,建议不要以 __ 为前缀. Python提供的魔术方法 魔术方法这里

Python中类的特殊方法详解

本文和大家分享的主要是python语言中类的特殊方法相关用法,希望对大家有帮助. 构造序列 1._len_(self) 2._getitem_(self,key) 3._setitem_(self,key,value) 4._delitem_(self,key) 程序演示: myseq.py class MySeq: def __init__(self): self.lseq = ["I","II","III","IV"] d

流动python - 什么是魔术方法(magic method)

我们经常看到各种各样的方法已经被包围了由双下划线,例如__init__,他们是魔术方法. 魔术方法python语言预订好"协议",在不同情况下不同的魔术方法,是隐式调用.我们重写这些方法,因此,操纵各种行为. class A(object): def __str__(self): return "I am A,2333" def __len__(self): return 42 a = A() print a#输出 "I am A,2333" p

飘逸的python - 什么是魔术方法(magic method)

我们经常看到各种被双下划线环绕的方法,如__init__,它们就是魔术方法. 魔术方法是python语言预定好的"协议",不同魔术方法在不同场景下,会被隐式调用.我们通过重载这些方法,从而操控各种行为. class A(object): def __str__(self): return "I am A,2333" def __len__(self): return 42 a = A() print a#输出 "I am A,2333" prin

python之使用魔术方法__getitem__和__len__

(1)像__getitem__这种由两个双下划线构成的方法,被称为魔术方法. (2)魔术方法是为了给python解释器用的.当使用len(collection)时,实际上调用的就是collection.__len__方法.而在使用obj[key]的形式来访问元素时,实际上调用的是object.__getitem__(key)方法. (3)魔术方法是属于类的方法,也就是说不需要实例化类就可以访问到该方法,同时,实例化的对象都可以访问到该方法. (4)使用__getitem__和__len__方法,

【python基础】魔术方法

魔术方法:就是类中的方法(预定义的方法),在某个特定的时机会被自动的调用. 1.__del__():销毁对象时,被自动的调用 1 class Person: 2 def __init__(self, name): 3 self.name = name 4 print('%s 被初始化' % self.name) 5 6 def __del__(self): 7 print("%s 被删除 " % self.name) 8 9 10 p1 = Person("奶茶")

Python中类的特殊属性和魔术方法

1.属性 属性 含义 __name__ 类.函数.方法等的名字   __dir__ __module__ 类定义所在的模块名 __class__ 对象或类所属的类   只是返回基类 __bases__ 返回自己到object的类,类的基类元组,顺序为在基类列表中出现的顺序. __doc__ 类,函数的文档字符串,如果没有定义则为None. __mro__ 类的不是实例的.类的mro,class.mro()返回的结果保存在__mro__中. __dict__ 类或实例属性,可写的字典. 标识符和名

24.python中类的方法

类中的方法,其实就是类中的函数,可以分为:实例方法,类方法,静态方法.方法和字段一样,也是属于类的属性,所以也具有运行中修改的特效, 但一般不推荐这样做. 我在类的基本语法中,介绍了构造器方法:__init__ .__new__:解构器方法:__del__; 注意,这里虽然是以两个下划线(__)开头,但同时以两个下划线(__)结尾,这里表明其是一个‘魔法方法’,关于类中的魔法方法,将起一篇进行说明. 但是,如果单纯只以两个下划线开始,则依然是私有化的意思,看代码示例: class Test(ob

Python中类的属性、方法及内置方法

1.类的属性 成员变量 对象的创建 创建对象的过程称之为实例化,当一个对象被创建后,包含三个方面的特性对象聚丙属性和方法, 句柄用于区分不同的对象, 对象的属性和方法,与类中的成员变量和成员函数对应, obj = MyClass()创建类的一个实例,扩号对象,通过对象来调用方法和属性 类的属性 类的属性按使用范围分为公有属性和私有属性类的属性范围,取决于属性的名称, **共有属性**---在内中和内外都能够调用的属性 **私有属性**---不能在内外贝类以外函数调用 定义方式:以"__"