Python3 操作符重载方法示例操作符重载方法示例
主要介绍了Python3 操作符重载方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小
编过来看看吧
基础知识基础知识
实际上,“运算符重载”只是意味着在类方法中拦截内置的操作……当类的实例出现在内置操作中,Python自动调用你的方法,并
且你的方法的返回值变成了相应操作的结果。以下是对重载的关键概念的复习:
1. 运算符重载让类拦截常规的Python运算。
2. 类可重载所有Python表达式运算符
3. 类可以重载打印、函数调用、属性点号运算等内置运算
4. 重载使类实例的行为像内置类型。
5. 重载是通过特殊名称的类方法来实现的。
换句话说,当类中提供了某个特殊名称的方法,在该类的实例出现在它们相关的表达式时,Python自动调用它们。正如我们已经
学习过的,运算符重载方法并非必须的,并且通常也不是默认的;如果你没有编写或继承一个运算符重载方法,只是意味着你的
类不会支持相应的操作。然而,当使用的时候,这些方法允许类模拟内置对象的接口,因此表现得更一致。
以下代码以Python3.6.1为例
操作符重载方法: 类(class)通过使用特殊名称的方法(len(self))来实现被特殊语法(len())的调用
#coding=utf-8
# specialfuns.py 操作符重载方法
# 类(class)通过使用特殊名称的方法(__len__(self))来实现被特殊语法(len())的调用
# 构造 与 析构 方法
class demo1:
# 构造方法, 对象实例化时调用
def __init__(self):
print("构造方法")
# 析构方法, 对象被回收时调用
def __del__(self):
print("析构方法")
# new
class demo2(object):
# __init__之前调用, 一般用于重写父类的__new__方法, 具体使用见 类 文章的 元类 代码部分(http://blog.csdn.net/rozol/article/details/69317339)
def __new__(cls):
print("new")
return object.__new__(cls)
# 算术运算
class demo3:
def __init__(self, num):
self.data = num
# +
def __add__(self, other):
return self.data + other.data
# -
def __sub__(self, other):
return self.data - other.data
# *
def __mul__(self, other):
return self.data * other.data
# /
def __truediv__(self, other):
return self.data / other.data
# //
def __floordiv__(self, other):
return self.data // other.data
# %
def __mod__(self, other):
return self.data % other.data
# divmod()
def __divmod__(self, other):
# 商(10/5),余数(10%5)
return self.data / other.data, self.data % other.data
# **
def __pow__(self, other):
return self.data ** other.data
# <<