1. 重载

  overloading:就是将函数重新定义一遍。

  1.1 __str__( )和__repr__( )的重载:

  格式:

  __str__( ):在调用print打印对象时自动调用,是给用户用的,是一个描述对象的方法。

  __repr__( ):给机器用的,在Python解释器或者在cmd的黑屏终端里面输入,注意在没有str时,且有repr,str = repr,其实本事就是打印类本身想要实现的属性。

  举例说明1:

class Person(object):
def __init__(self,name,age,height,weight):
self.name = name
self.age = age
self.height = height
self.weight = weight
def __str__(self):
# return "这里是__str__"
return "%s-%d-%d-%d" %(self.name,self.age,self.height,self.weight)
# def __repr__(self):
# # return "这里是__str__"
# return "%s-%d-%d-%d" %(self.name,self.age,self.height,self.weight) per = Person("hanmeimei",,,)
print(per)
print(per.__str__()) # 其实不写入类体重,这里也是可以直接打印的。
# hanmeimei---
# hanmeimei---

  优点:当一个对象的属性值很多的时候,兵器都需要打印,重写__str__方法后,简化了代码。  

  

  1.2 __add__( ) 的重载

  比如我们有这么两个运算

  print(1 + 2)

  print("1" + "2")

  我们知道,返回的结果一个是3,一个是12。前面是一个int类型的数值,后面是一个字符串。也就是说,不同类型的加法会有不同给的解释。

  因此我们在类中重新定义一个加法的重载。

  格式:

  __add__(self,other):sef代表加号前面的对象,other表示加法后面的对象。  

  举例说明2:

class Person(object):
def __init__(self,num):
self.num = num
# 运算符重载
def __add__(self, other): #self 代表加号前面的对象,other表示加法后面的对象
return Person(self.num + other.num)
def __str__(self):
return "num = " + str(self.num) per1 = Person()
per2 = Person()
print(per1 + per2)
print(per1.__add__(per2))
# num =

  1.3 其他重载

  Python当中的重载也不算很多,我下面列举了一个小表格,对Python的重载进行罗列

  在很多教材中:重载也叫Python的魔法方法。

  

  小贴士:

  help和dir

  help可以查询相关的内容解释,dir可以查看目录内的内容。

help("__add__()")
# 用help去查找帮助内容:
# No Python documentation found for '__add__()'.
# Use help() to get the interactive help utility.
# Use help(str) for help on the str class. class Person(object):
def __init__(self,name):
self.name = name per = Person("Tom")
print(dir(per))
# 现实类相关的内容
# ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__',
# '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__',
# '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__',
# '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__',
# '__str__', '__subclasshook__', '__weakref__', 'name']

2. 重写

  overriding:就是一个类当中可以有一个以上的方法具有相同名称。

  举例说明1:

class Person(object):
def __init__(self,name,age,height,weight):
self.name = name
self.age = age
self.height = height
self.weight = weight def run(self):
print("run1") def run(self):
print("run2") per = Person("hanmeimei",,,)
per.run()
# 返回值:run2

  其实我们发现Python并不需要重载。在C#语言中,重载时两个相同的函数名,且参数类型不一样,类似于:

  run(int b)

  run(long b)

  这种函数时重载的现象。但是python里面的重载其实就是识别最后一个函数的意思。

  

  举例说明2:我们在通过一个类的继承来观察重写,在父类中有一个run方法,子类继承父类,也有一个相同的run方法。我们发现也是最后面那个重写的run2进行加载

class Person(object):
def __init__(self,name,age,height,weight):
self.name = name
self.age = age
self.height = height
self.weight = weight def run(self):
print("run1") class Worker(Person):
def __init__(self,name,age,height,weight):
super(Worker,self).__init__(name,age,height,weight) def run(self):
print("run2") per = Person("hanmeimei",,,)
wor = Worker("Tom",,,)
wor.run()
# 返回值:run2

Python笔记_第三篇_面向对象_3.重载(overloading)和重写(overriding)的更多相关文章

  1. Python笔记_第三篇_面向对象_4.单下划线和双下划线

    说道这里我们需要稍微暂停一下.前面我们说到了类是作为一个对象存放容器.这个容器里面有属性和方法.最好的理解类的方式就是把类想想成一个容器. 然后构造了一个析构函数和构造函数,然后又对object和se ...

  2. Python笔记_第三篇_面向对象_2.第一个Python类

    1. 设计一个类: 设计一个类主要从三个方面进行考虑: 第一:类名:类名要见名知意.首字母大写. 第二:属性. 第三:方法. 备注:在Python中有些东西并不是绝对化的事情,有些根据Python社区 ...

  3. Python笔记_第三篇_面向对象_9.Python中的"get"和"set"方法(@property和@.setter)

    1. 限制访问的问题: 如果学过C# 语言的我们可以知道C# 语言有get和set方法.我们之前想要获取父类中的私有变量,只能通过写一个set和get的函数进行访问或者通过类生成的新关键字来访问私有属 ...

  4. Python笔记_第三篇_面向对象_1.面向对象的基本概念和作用域

    1. 软件编程的实质: 软件编程就是将我们的思维转变成计算机能够识别语言的一个过程.重要的是思想,代码技术反而次要.因此思想也是最难的,突破固定的思想是关键 2. 什么是面向过程: * 自上而下顺序执 ...

  5. Python笔记_第三篇_面向对象_2.构造函数和析构函数(含self说明)

    1. 构造函数: 为什么要有构造函数? 打一个比方:类的创建就是好比你创建了好了一种格式的房间,你租给上一个住户的后,里面会对方很多“垃圾”和不规则的物品摆放.构造函数就是下一个住户再使用的时候进行物 ...

  6. Python笔记_第三篇_面向对象_5.一个关于类的实例(人开枪射击子弹)

    1. 我们学了类的这些东西,用这些类我们来操作一个关于类的实例. 2. 题目:人开枪射击子弹,然后具有装弹动作,然后再开枪. 第一步:设计类: 人类名:Person属性:gun行为:fire,fill ...

  7. Python笔记_第三篇_面向对象_8.对象属性和类属性及其动态添加属性和方法

    1. 对象属性和类属性. 我们之前接触到,在类中,我们一般都是通过构造函数的方式去写一些类的相关属性.在第一次介绍类的时候我们把一些属性写到构造函数外面并没有用到构造函数,其实当时在写的时候,就是在给 ...

  8. Python笔记_第三篇_面向对象_7.多态

    1. 多态的概念 多态:一种事物的多种形态.其表现形式就是连续的继承关系. 还以人喂食动物的例子.最终目标是人可以喂食任何一种动物.如果人要喂食100多种动物,难道要写100中方法吗?多态就是把属性和 ...

  9. Python笔记_第三篇_面向对象_6.继承(单继承和多继承)

    1. 概念解释: 继承:有两个类:A类和B类.那么A类就拥有了B类中的属性和方法. * 例如:Object:是所有类的父亲,还可以成为基类或者超类(super()) * 继承者为子类,被继承者成为父类 ...

随机推荐

  1. django下载

    pip install django ==2.0.5 创建目录 1创建目录 2终端下进入目录 3输入django-admin startproject project

  2. javascript如何获取复选框中的值?

    思路:获取checkbox对象→循环checkbox数组,根据checked属性判断是否选中→使用value属性获取选中项的值.实例演示如下: 1.HTML结构 <form> <in ...

  3. 专题复习--背包问题+例题(HDU 2602 、POJ 2063、 POJ 1787、 UVA 674 、UVA 147)

    *注 虽然没什么人看我的博客但我还是要认认真真写给自己看 背包问题应用场景给定 n 种物品和一个背包.物品 i 的重量是 w i ,其价值为 v i ,背包的容量为C.应该如何选择装入背包中的物品,使 ...

  4. Jenkins-在CentOS7 上安装配置

    Jenkins-在CentOS7 上安装配置 1.安装JDK yum install -y java 2.安装jenkins 方法1:添加Jenkins库到yum库,Jenkins将从这里下载安装. ...

  5. H5调微信/支付宝

    (1)微信支付:前端点击按钮==>请求接口(后台的接口,把订单号什么玩意传过去)==>后台自己***去请求微信支付接口(什么微信需要的任何参数和前端无关,都交给后台自己弄吧)==>微 ...

  6. Spring Boot作为Spring Cloud基础设施

    spring cloud包含的核心特性: Distributed/versioned configuration(分布式配置) Service registration and discovery(服 ...

  7. docker入门资料及常用命令

      Docker17中文开发手册 :https://www.php.cn/manual/view/36147.html   Linux部署Docker及常用命令: https://www.cnblog ...

  8. 可重入排他锁ReentrantLock源码浅析

    1.引子 "ReentrantLock"单词中的“Reentrant”就是“重入”的意思,正如其名,ReentrantLock是一个支持重入的排他锁,即同一个线程中可以多次获得同步 ...

  9. 使用 prototype 定义方法和属性

    除了可以在类的构造器方法中定义方法和属性外,也可以使用 prototype 定义方法和属性.每个类都有这个属性,该属性是一个静态属性,因此无需实例化,只需使用类引用该属性即可. 1.1 使用 prot ...

  10. 转 SQL 的数据库 架构规范 之 58到家数据库30条军规解读

    军规适用场景:并发量大.数据量大的互联网业务 军规:介绍内容 解读:讲解原因,解读比军规更重要 一.基础规范 (1)必须使用InnoDB存储引擎 解读:支持事务.行级锁.并发性能更好.CPU及内存缓存 ...