美文网首页
常见的运算符重载方法

常见的运算符重载方法

作者: 低吟浅唱1990 | 来源:发表于2017-05-14 11:42 被阅读12次
方法 重载 调用
__init__ 构造函数 对象建立:X = Class(args)
__del__ 析构函数 X对象收回
__repr__,__str__ 打印、装换 print(x),repr(x),str(x)
__add__ 运算符+ 如果没有__iadd__,X+Y,X+=Y
__call__ 函数调用 X(args,*kwargs)
__getattr__ 点号运算 X.undefined(拦截没有定义的属性)
__setattr__ 属性赋值语句 X.any = value(拦截赋值语句,注意避免循环)
__delattr__ 属性删除 del X.any
__getattribute__ 属性获取 X.any(拦截所有属性)
__getitem__ 索引运算 X[key],X[i:j],没有__iter__时的for循环和其他迭代器
__setitem__ 索引赋值语句 x[key]=value,x[i:j]=sequence
__delitem__ 索引和分片删除 del x[key],del x[i:j]
__len__ 长度 len(x)
__iter__,__next__ 迭代环境 I = iter(x),next(I)
__contains__ 成员关系测试 item in X(任何可迭代的)
__index__ 整数值 hex(x),bin(x)
__enter__,__exit__ 环境管理器 with obj as var:
__get__,__set__,__delete__ 描述符属性 X.attr,X.attr = value,del X.attr
__new__ 创建 在__init__之前创建对象

call表达式:__call__(注意不是拦截构造函数)
<pre>

class Callee:
def __call__(self,args,*kwargs):
print('Called:',args,kwargs)
c = Callee()
c(1,2,3)
Called:(1,2,3){}
c(1,2,3,x=4,y=5)
Called:(1,2,3){'y':5,'x':4}
</pre>

索引和分片__getitem__和__setitem__
如果在类中定义了的话,则对于实例的索引运算会自动调用_\getitem__。当实例x出现x[i]这样的索引运算时,会调用__getitem__。
<pre>

--coding:UTF-8--

class Indexer:
def __getitem__(self,index):
return index**2
if __name__ == '__main__':
x = Indexer()
print(x[2])

4
</pre>
除了索引分片表达式也调用__getitem__,内置类型以同样的方式处理分片
<pre>
class Indexer:
data = [5,6,7,8,9]
def __getitem__(self,index):
print('getitem:',index)
return self.data[index]
if __name__ == '__main__':
x = Indexer()
print(x[2:4])

getitem: slice(2, 4, None) #这里存在一个分片对象
[7, 8]
</pre>

相关文章

  • 10月18日四期C#总结

    今天老师给我们讲了is运算符、as运算符、逻辑运算符、方法重载等。而方法重载依赖于方法签名。方法的重载就是同一个类...

  • 2017-10-19

    知识点 is运算符、as运算符、逻辑运算符、方法重载等。而方法重载依赖于方法签名。方法的重载就是同一个类中添加几个...

  • 常见的运算符重载方法

    call表达式:__call__(注意不是拦截构造函数) class Callee:def __call__(se...

  • c++ 运算符重载

    重载方法 运算符的重载实质上是函数的重载。函数的重载就是对一个已有函数赋予新的含义,使之实现新的功能。 重载运算符...

  • C++ 部分运算符重载

    可重载的运算符 不可重载的运算符和符号 重载运算符为类的成员函数 重载运算符为友元函数 重载赋值运算符 重载流插入...

  • 9.22总结

    一.知识点总结 1.运算符重载关键字operator 类型为重载运算符的返回类型 2.最常见的是友元函数与重载运算...

  • 运算符重载及其他约定

    7.1 重载算术运算符 重载二元算术运算符 重载复合赋值运算符 重载一元运算符 重载比较运算符 等号运算符:‘eq...

  • 2019-07-11 运算符的重载

    运算符的重载 重载运算符 (“::”,“.*”,“.”,“?:”)不能被重载。 重载运算符时,不能改变其本质,如不...

  • Python:Python学习总结(三)

    魔法方法 对象构造相关:new、init、del。 运算符重载:所有运算符都能重载。 属性访问 集合实现 可调用对...

  • C++重载

    重载 C++语言规定: 重载的运算符要保持原运算符的意义。只能对已有的运算符重载,不能增加新的运算符。重载的运算符...

网友评论

      本文标题:常见的运算符重载方法

      本文链接:https://www.haomeiwen.com/subject/asxqxxtx.html