重载概念
  重载是对继承的父类方法进行重新定义。重载可以重新定义方法还可以重新定义运算符。因为通过继承的类不一定能满足当前类的需求。在当前类中只需要修改部分内容而达到自己的需求。

重载特点
  减少代码量和灵活指定型类


  子类具有父类的方法和属性
  子类不能继承父类的私有方法或属性


  子类可以添加新的方法


  子类可以修改父类的方法

方法重载

 # 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-重载的更多相关文章

  1. Eclipse中pydev开发,python重载__init__报错,是可以正常执行

    python支持函数重载 而在使用Eclipse的pydev开发时,重载函数__init__时,却出现了错误duplicated 我想不到解决办法,但是居然能正常执行. pydev报错是编译错误,而p ...

  2. python重载四则运算符及输出格式设置

    数学运算 Python 提供的基本数据类型 int.float 可以做整数和浮点的四则运算以及乘方等运算. 但是,四则运算不局限于int和float,还可以是有理数.矩阵等. 要表示有理数,可以用一个 ...

  3. python 重载 __hash__ __eq__

    __author__ = 'root' from urlparse import urlparse class host_news(): def __init__(self, id, url): se ...

  4. Python重载比较运算符

    对象包含的内置方法 class MyObj(object): def __init__(self): self.value = 0 myObj = MyObj() print(dir(myObj)) ...

  5. python 的重载

    python 的重载主要包括方法重载和运算符重载.1.python 方法重载: 其他的语言一般对于方法重载的话,主要是根据参数的类型不同或者是数量不同来区分同名的方法.而python则比较特殊,它本身 ...

  6. 2.python知识点总结

    1.什么是对象?什么是类? 对象是对类的具体表达,类是对象的抽象表达. 类只是为所有的对象定义了抽象的属性与行为. —————————————————————————————————————————— ...

  7. Python 面试题学习

    Python的函数参数传递 在Python中,strings,tuples=('abc',123,2.2,'join),numbers 是不可更改的对象. list=['abc',123,2.23,' ...

  8. 【转】Boost.Python

    http://edyfox.codecarver.org/html/boost_python.html Boost.Python 是 Boost 中的一个组件,使用它能够大大简化用 C++ 为 Pyt ...

  9. python运算符重载

    python运算符重载就是在解释器使用对象内置操作前,拦截该操作,使用自己写的重载方法. 重载方法:__init__为构造函数,__sub__为减法表达式 class Number: def __in ...

  10. paip.编程语言方法重载实现的原理及python,php,js中实现方法重载

    paip.编程语言方法重载实现的原理及python,php,js中实现方法重载 有些语言,在方法的重载上,形式上不支持函数重载,但可以通过模拟实现.. 主要原理:根据参数个数进行重载,或者使用默认值 ...

随机推荐

  1. 对 MES 感兴趣?赶紧看过来!

    在知乎许久都没有智能制造话题,索性自己在 2018-06-08 创建了智能制造话题,在创建话题过程中也遇到些麻烦,最终联系了知乎小管家,成功创建了该话题.目前过去7个月了,该话题的关注人数有820人了 ...

  2. CenOS_用户管理

    1.用户的创建 1.1基本创建 useradd <用户名> 如:useradd xm 默认在home目录下 为用户增加/修改密码: passwd <用户名> 如:passwd ...

  3. SQL Server作业报错特殊案例

    一个作业报错,报错信息如下,从错误信息根本看不出为什么出错,手工运行作业又成功了.一时不清楚什么原因导致作业出错. Message Executed as user: NT SERVICE\SQLSE ...

  4. windows凭据管理

    解决windows凭据无法保存的问题1: 运行-gpedit.msc(组策略)-计算机配置-管理模板-系统-凭据分配 双击右侧”允许分配保存的凭据用于仅NTLM服务器身份验证“ 在弹出的窗口中选中“已 ...

  5. [ gczdac ] 20190306 访者必阅

    1.我的私人博客!!! 2.博主还处于入门学习阶段,并且非常玻璃心 3. 激烈讨论√  人身攻击× 4. 欢迎指正错误,相互学习 5. 很少在线,无法及时回复请谅解 https://www.cnblo ...

  6. 题目:python 打印出如下图案(菱形):

    # 题目:打印出如下图案(菱形): # # * # *** # ***** # ******* # ***** # *** # * nu = 1 # 开始值 k = 2 # 变量值 while nu ...

  7. node项目自动化部署--基于Jenkins,Docker,Github(1)安装Jenkins

    前言 每次项目代码更新后都要重新部署,如果只有一台服务器还好. 但是如果是分布式系统,动不动就很多台服务器,所以代码的自动部署就显得十分重要了. 这里用几篇文章来记录一下如何使用Jenkins,Doc ...

  8. mysql的学习笔记(五)

    1.子查询,出现在其他SQL语句的SELECT子句 SELECT * FROM t1 WHERE col1=(SELECT col2 FROM t2); 第一个SELECT称为外层查询,第二个称为子查 ...

  9. 安装window下的redis,redis可视化管理工具(Redis Desktop Manager)安装,基础使用,实例化项目

    以下包括内容: 一.redis下载安装,启动 二.Redis可视化管理工具(Redis Desktop Manager)安装 三.实例化项目 一.redis下载安装,启动 1,redis官方下载地址: ...

  10. Image和Base64互相转换

    base64介绍: Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息.例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长 ...