python-重载
重载概念
重载是对继承的父类方法进行重新定义。重载可以重新定义方法还可以重新定义运算符。因为通过继承的类不一定能满足当前类的需求。在当前类中只需要修改部分内容而达到自己的需求。
重载特点
减少代码量和灵活指定型类
子类具有父类的方法和属性
子类不能继承父类的私有方法或属性
子类可以添加新的方法
子类可以修改父类的方法
方法重载
# coding=utf-8 class human(object):
__name = '' # 定义属性
__sex = 0
__age = 0
__height = 0
__weight = 0 def __init__(self, sex, age, height, weight):
self.__sex = sex
self.__age = age
self.__height = height
self.__weight = weight def set_name(self,name):
self.__name = name def show(self):
print(self.__name, self.__sex, self.__age, self.__height, self.__weight) class student(human):
__classes = 0
__grade = 0
__num = 0
def __init__(self, classes,grade,num,sex,age,height,weight): # 重载 __init__ 方法
self.__classes = classes
self.__grade = grade
self.__num = num
human.__init__(self, sex, age, height, weight) def show(self): # 重载 show 方法
human.show(self)
print(self.__classes,self.__grade,self.__num) if __name__ == '__main__':
a = student(3,2,19910218,'男',13,'',45)
a.set_name('小明')
a.show()
运行结果

运算符重载
运算符重载是在类方法中拦截内置的操作——当类的实例出现在内置操作中,Python自动调用重新定义的方法,并将重新定义方法的返回值变成了相应操作的结果
class List(object):
__list = [] def __init__(self, *args): # 重载 __init__ 方法
self.__list = []
for arg in args:
self.__list.append(arg) def __add__(self, n): # 重载 + 运算符
for i in range(0,len(self.__list)):
self.__list[i] = self.__list[i] + n def __sub__(self, n): # 重载 - 运算符
for i in range(0,len(self.__list)):
self.__list[i] = self.__list[i] - n def __mul__(self, n): # 重载 * 运算符
for i in range(0,len(self.__list)):
self.__list[i] = self.__list[i] * n def __div__(self, n): # 重载 / 运算符
for i in range(0,len(self.__list)):
self.__list[i] = self.__list[i] / n def show(self):
print(self.__list) if __name__ == '__main__':
myList = List(1,2,3,4,5,6,7,8,9)
myList.show() myList + 3
myList.show() myList - 2
myList.show() myList * 2
myList.show()
运行结果

常见的运算符重载方法
| method | overload | call |
| __init__ | 构造函数 | 对象创建: X = Class(args) |
| __del__ | 析构函数 | X对象收回 |
| __add__ | 云算法+ | 如果没有_iadd_, X+Y, X+=Y |
| __or__ | 运算符| | 如果没有_ior_,X|Y, X|=Y |
| _repr__, __str__ | 打印,转换 | print(X),repr(X),str(X) |
| __call__ | 函数调用 | X(*args, **kwargs) |
| __getattr__ | 点号运算 | X.undefined |
| __setattr__ | 属性赋值语句 | X.any=value |
| __delattr__ | 属性删除 | del X.any |
| __getattribute__ | 属性获取 | X.any |
| __getitem__ | 索引运算 | X[key],X[i:j] |
| __setitem__ | 索引赋值语句 | X[key],X[i:j]=sequence |
| __delitem__ | 索引和分片删除 | del X[key],del X[i:j] |
| __len__ | 长度 | len(X),如果没有__bool__,真值测试 |
| __bool__ | 布尔测试 | bool(X) |
| __lt__, __gt__, __le__, __ge__, __eq__, __ne__ |
特定的比较 | X<Y,X>Y,X<=Y,X>=Y, X==Y,X!=Y 注释:(lt: less than, gt: greater than, le: less equal, ge: greater equal, eq: equal, ne: not equal ) |
| __radd__ | 右侧加法 | other+X |
| __iadd__ | 实地(增强的)加法 | X+=Y(or else __add__) |
| __iter__, __next__ | 迭代环境 | I=iter(X), next() |
| __contains__ | 成员关系测试 | item in X(任何可迭代) |
| __index__ | 整数值 | hex(X), bin(X), oct(X) |
| __enter__, __exit__ | 环境管理器 | with obj as var: |
| __get__, __set__, __delete__ |
描述符属性 | X.attr, X.attr=value, del X.attr |
| __new__ | 创建 | 在__init__之前创建对象 |
原文发布在 软件羊皮卷 微信公众号中,欢迎大家关注

python-重载的更多相关文章
- Eclipse中pydev开发,python重载__init__报错,是可以正常执行
python支持函数重载 而在使用Eclipse的pydev开发时,重载函数__init__时,却出现了错误duplicated 我想不到解决办法,但是居然能正常执行. pydev报错是编译错误,而p ...
- python重载四则运算符及输出格式设置
数学运算 Python 提供的基本数据类型 int.float 可以做整数和浮点的四则运算以及乘方等运算. 但是,四则运算不局限于int和float,还可以是有理数.矩阵等. 要表示有理数,可以用一个 ...
- python 重载 __hash__ __eq__
__author__ = 'root' from urlparse import urlparse class host_news(): def __init__(self, id, url): se ...
- Python重载比较运算符
对象包含的内置方法 class MyObj(object): def __init__(self): self.value = 0 myObj = MyObj() print(dir(myObj)) ...
- python 的重载
python 的重载主要包括方法重载和运算符重载.1.python 方法重载: 其他的语言一般对于方法重载的话,主要是根据参数的类型不同或者是数量不同来区分同名的方法.而python则比较特殊,它本身 ...
- 2.python知识点总结
1.什么是对象?什么是类? 对象是对类的具体表达,类是对象的抽象表达. 类只是为所有的对象定义了抽象的属性与行为. —————————————————————————————————————————— ...
- Python 面试题学习
Python的函数参数传递 在Python中,strings,tuples=('abc',123,2.2,'join),numbers 是不可更改的对象. list=['abc',123,2.23,' ...
- 【转】Boost.Python
http://edyfox.codecarver.org/html/boost_python.html Boost.Python 是 Boost 中的一个组件,使用它能够大大简化用 C++ 为 Pyt ...
- python运算符重载
python运算符重载就是在解释器使用对象内置操作前,拦截该操作,使用自己写的重载方法. 重载方法:__init__为构造函数,__sub__为减法表达式 class Number: def __in ...
- paip.编程语言方法重载实现的原理及python,php,js中实现方法重载
paip.编程语言方法重载实现的原理及python,php,js中实现方法重载 有些语言,在方法的重载上,形式上不支持函数重载,但可以通过模拟实现.. 主要原理:根据参数个数进行重载,或者使用默认值 ...
随机推荐
- 了解git的命令行使用
git现在已经是非常大众的版本管理工具了,如果在windows下用vs这种ide,已经可以很简单的点点鼠标就完成大部分工作了. 但是在某些特殊情况用命令行时,还是需要了解很多命令的. 安装 linux ...
- Altium Designer快速调整丝印
Altium Designer快速调整丝印 今天我为大家讲的内容是altium designer快速调整丝印,这是我们做完PCB设计布线完成后的下一个步,很多朋友都是非常熟悉的.但是我们很多人只会用a ...
- Git来操作GitHub~
设置用户名(设置一次 以后就不用再设置了) git config --global user.name 'taopanfeng' 设置邮箱(设置一次 以后就不用再设置了) git config --g ...
- DNS服务详解
DNS服务 目录: 一.DNS原理 二.DNS服务的安装与配置 三.DNS信息收集 一.DNS原理 1.hosts文件与DNS服务器 1.1hosts文件 目录:C:\WINDOWS\system32 ...
- Windows2008安装组件命令行工具ServerManagerCmd用法介绍
转自:http://blog.sina.com.cn/s/blog_537de4b5010128al.html Windows2008 安装组件服务等内容比原来复杂的多,用鼠标点来点去,既繁琐也缓慢, ...
- 使用Swiper轮播插件引起的探索
提到Swiper轮播插件,小伙伴们应该不会感到陌生.以前我主要在移动端上使用,PC端使用较少. 注:这里需要注意的是,在PC端和移动端使用Swiper是不同的 官方给的版本有三个,分别是Swiper2 ...
- React教程(一) React介绍与搭建
React的介绍: React来自于Facebook公司的开源项目 React 可以开发单页面应用 spa(单页面应用) react 组件化模块化 开发模式 React通过对DOM的模拟(虚拟dom) ...
- IDEA设置热部署
1.点击File找到Settings打开. 1.2:找到Compiler将 Build project automatically 勾选 2.使用快捷键 Ctrl+Shift+A 搜索 re ...
- java~gradle构建公用包并上传到仓库
java~gradle构建公用包并上传到仓库 我们一般会把公用的代码放在一个包里,然后其它 项目可以直接使用,就像你使用第三方包一样! 仓库 存储包的地方叫做仓库,一般可以分为本地仓库和远程仓库,本地 ...
- qs.stringify和JSON.stringify的使用和区别
qs可通过npm install qs命令进行安装,是一个npm仓库所管理的包. 而qs.stringify()将对象 序列化成URL的形式,以&进行拼接. JSON是正常类型的JSON,请对 ...