python单目运算_python魔法方法-单目运算及一般算数运算

本文详细介绍了Python中用于单目运算的魔法方法,如`__pos__`、`__neg__`、`__abs__`和`__invert__`,并展示了如何自定义这些方法实现特定行为。同时,文章还探讨了一般算数运算的魔法方法,如`__add__`、`__sub__`、`__mul__`等,并通过示例解释了如何重载这些方法以自定义对象间的运算行为。最后,通过一个`Foo`类的实例演示了各种运算方法的实现和使用效果。
摘要由CSDN通过智能技术生成

在比较的魔法方法中,我们讨论了魔法方法其实就是重载了操作符,例如>、

1.单目运算符或单目运算函数

__pos__(self)

实现一个取正数的操作(比如 +some_object ,python调用__pos__函数)

__neg__(self)

实现一个取负数的操作(比如 -some_object )

__abs__(self)

实现一个内建的abs()函数的行为

__invert__(self)

实现一个取反操作符(~操作符)的行为。

__round__(self, n)

实现一个内建的round()函数的行为。 n 是待取整的十进制数.(貌似在2.7或其他新版本中废弃)

__floor__(self)

实现math.floor()的函数行为,比如, 把数字下取整到最近的整数.(貌似在2.7或其他新版本中废弃)

__ceil__(self)

实现math.ceil()的函数行为,比如, 把数字上取整到最近的整数.(貌似在2.7或其他新版本中废弃)

__trunc__(self)

实现math.trunc()的函数行为,比如, 把数字截断而得到整数.

class Foo(str):

def __new__(cls, x, *args, **kwargs):

return super(Foo, cls).__new__(cls, x)

def __init__(self, x):

self.x = x

def __pos__(self):

return '+' + self.x

def __neg__(self):

return '-' + self.x

def __abs__(self):

return 'abs:' + self.x

def __invert__(self):

return 'invert:' + self.x

a = Foo('scolia')

print +a

print -a

print ~a

713362a48f7349d24badb802b4033bc0.png

2.一般算数运算

__add__(self, other)

实现一个加法.

__sub__(self, other)

实现一个减法.

__mul__(self, other)

实现一个乘法.

__floordiv__(self, other)

实现一个“//”操作符产生的整除操作

__div__(self, other)

实现一个“/”操作符代表的除法操作.(因为Python 3里面的division默认变成了true division,__div__在Python3中不存在了)

__truediv__(self, other)

实现真实除法,注意,只有当你from __future__ import division时才会有效。

__mod__(self, other)

实现一个“%”操作符代表的取模操作.

__divmod__(self, other)

实现一个内建函数divmod()

__pow__

实现一个指数操作(“**”操作符)的行为

__lshift__(self, other)

实现一个位左移操作(<

__rshift__(self, other)

实现一个位右移操作(>>)的功能.

__and__(self, other)

实现一个按位进行与操作(&)的行为.

__or__(self, other)

实现一个按位进行或操作(|)的行为.

__xor__(self, other)

实现一个异或操作(^)的行为

class Foo(str):

def __new__(cls, x, *args, **kwargs):

return super(Foo, cls).__new__(cls, x)

def __init__(self, x):

self.x = x

def __add__(self, other):

return self.x + '+' + other.x

def __sub__(self, other):

return self.x + '-' + other.x

def __mul__(self, other):

return self.x + '*' + other.x

def __floordiv__(self, other):

return self.x + '//' + other.x

def __div__(self, other):

return self.x + '/' + other.x

def __truediv__(self, other):

return self.x + 't/' + other.x

def __mod__(self, other):

return self.x + '%' + other.x

def __divmod__(self, other):

return self.x + 'divmod' + other.x

def __pow__(self, power, modulo=None):

return self.x + '**' + str(power)

def __lshift__(self, other):

return self.x + '<

def __rshift__(self, other):

return self.x + '>>' + other.x

def __and__(self, other):

return self.x + '&' + other.x

def __or__(self, other):

return self.x + '|' + other.x

def __xor__(self, other):

return self.x + '^' + other.x

a = Foo('scolia')

b = Foo('good')

print a + b

print a - b

print a * b

print a // b

print a / b

print a % b

print divmod(a, b)

print a ** b

print a << b

print a >> b

print a & b

print a | b

print a ^ b

5a5d725af5db78d074475f0da1c47f4a.png

from __future__ import division

.......

print a / b

1e39157a8dd74f9eb0361d6201f2d31c.png

欢迎大家交流

参考资料:戳这里

1&period; Python 魔法方法

Python 魔法方法 基础: 如果你想... 所以,你写... Python调用... 初始化一个实例 x = MyClass() x.__init__() 作为一个字符串的"官方&quo ...

python魔法方法大全

1.python魔法方法详解: python魔法方法是可以修改重载的,如果你的对象实现(重载)了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python 所调用,你可以定义自己想要的行为,而 ...

with上下文管理 python魔法方法

with语法在Python里很常见, 主要的利好是使用代码更简洁. 常见的使用场景有: 1. 资源对象的获取与释放. 使用with可以简化try...finally ... 2. 在不修改函数代码的前 ...

python 魔法方法诠释

什么是Python魔法方法 什么是魔法方法呢?它们在面向对象的Python的处处皆是.它们是一些可以让你对类添加"魔法"的特殊方法. 它们经常是两个下划线包围来命名的(比如 ini ...

Python魔法方法总结及注意事项

1.何为魔法方法: Python中,一定要区分开函数和方法的含义: 1.函数:类外部定义的,跟类没有直接关系的:形式: def func(*argv): 2.方法:class内部定义的函数(对象的方法 ...

python魔法方法-反射运算和增量运算

反射运算 什么是反射运算符,其实就是反转了两个对象,下面先看一个普通运行符的实现: class Foo(object): def __init__(self, x): self.x = x def _ ...

python 魔法方法

I am not a creator, I just a porter. Note: Everything is object in python. 对于Python来说一切都是对象,也就是函数的参数 ...

随机推荐

Android入门&lpar;十三&rpar;内容提供器

原文链接:http://www.orlion.ga/612/ 内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一 ...

Python自动化之线程进阶篇(二)

queue队列 class queue.Queue(maxsize=0) #先入先出 class queue.LifoQueue(maxsize=0) #后入先出 class queue.Priori ...

新浪微博OAuth2&period;0的用法

最近学习Android开发,照着视频开发新浪微博,但是视频里的介绍的是OAuth1.0的授权方式,试了半天发现用不了. 原来现在一般没审核的用户只能使用OAuth2.0了,视频教学里的方法已经过时了. ...

现在&comma; Delphi 的多线程已经非常易用了&excl;

先看一个非多线程的例子, 代码执行时不能进行其它操作(譬如拖动窗体): {自定义方法: 在窗体上绘制...} procedure MyMethod; var   i: Integer; begin   ...

Project Management Process

Project Management ProcessDescription .............................................................. ...

点击每一个button,弹出相应的索引号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值