动态添加实例方法:

使用types.MethodType这个方法了,示例代码如下:

import types
class Person(object):def __init__(self,name):self.name = name
def run(self):print('%s在奔跑' % self.name)
p1 = Person('p1')
p1.run = types.MethodType(run,p1)
p1.run()

其中types.MethodType的第一个参数是这个函数本身,第二个参数是在调用run这个函数的时候,传给run方法的第一个参数。


property() 函数

property() 函数的作用是在新式类中返回属性值。
property() 方法的语法:

class property([fget[, fset[, fdel[, doc]]]])


实例

class C(object):def __init__(self):self._x = Nonedef getx(self):return self._xdef setx(self, value):self._x = valuedef delx(self):del self._xx = property(getx, setx, delx, "I'm the 'x' property.")

运算符重载

作用:

  1. 让自定义的实例像内建对象一样进行运算符操作
  2. 让程序简洁易读
  3. 对自定义对象将运算符赋予新的规则

算术运算符的重载:

  方法名                 运算符和表达式       说明
__add__(self,rhs)        self + rhs        加法
__sub__(self,rhs)        self - rhs        减法
__mul__(self,rhs)        self * rhs        乘法
__truediv__(self,rhs)    self / rhs        除法
__floordiv__(self,rhs)   self //rhs       地板除
__mod__(self,rhs)        self % rhs     取模(求余)
__pow__(self,rhs)        self **rhs       幂运算

加减运算:add__和__sub
重载这两个方法就可以在普通的对象上添加+-运算符操作。下面的代码演示了如何使用+-运算符,如果将代码中的__sub__方法去掉,再调用减号运算符就会出错。

>>> class Computation():def __init__(self,value):self.value = valuedef __add__(self,other):return self.value + otherdef __sub__(self,other):return self.value - other
>>> c = Computation(5)
>>> c + 5
10
>>> c - 3
2

Python同样支持运算符重载,我们可以对类的专有方法进行重载,实例如下:

class Vector:def __init__(self, a, b):self.a = aself.b = bdef __str__(self):return 'Vector (%d, %d)' % (self.a, self.b)def __add__(self,other):return Vector(self.a + other.a, self.b + other.b)
v1 = Vector(2,10)
v2 = Vector(5,-2)
print (v1 + v2)

以上代码执行结果如下所示:

Vector(7,8)

二元运算符的重载方法格式:

   def __xx__(self,other):语句块

示例:

class Mylist:def __init__(self, iterable=()):self.data = list(iterable)def __repr__(self):return 'Mylist(%s)' % self.datadef __add__(self, lst):return Mylist(self.data + lst.data)def __mul__(self, rhs):# rhs为int类型,不能用rhs.datareturn Mylist(self.data * rhs)
L1 = Mylist([1, 2, 3])
L2 = Mylist([4, 5, 6])
L3 = L1 + L2
print(L3)  # Mylist([1,2,3,4,5,6])
L4 = L2 + L1
print(L4)  # Mylist([4,5,6,1,2,3])
L5 = L1 * 3
print(L5)  # Mylist([1,2,3,1,2,3,1,2,3])

python面向对象-2相关推荐

  1. python面向对象的优点_Python面向对象编程——总结面向对象的优点

    Python面向对象编程--总结面向对象的优点 一.从代码级别看面向对象 1.在没有学习类这个概念时,数据与功能是分离的 def exc1(host,port,db,charset): conn=co ...

  2. 这可能是Python面向对象编程的最佳实践

    作者 | 崔庆才 来源 | 进击的Coder(ID:FightingCoder) Python 是支持面向对象的,很多情况下使用面向对象编程会使得代码更加容易扩展,并且可维护性更高,但是如果你写的多了 ...

  3. 第八课.Python面向对象(二)

    类的继承和多态 继承和多态与函数有共同的目的,都是为了减少代码的冗余,提高复用的效率: 根据"Python面向对象(一)"的笔记,我现在定义一个Cinema类: #父类 class ...

  4. Python面向对象编程:类继承和其衍生术语

    Python面向对象编程03:类继承和其衍生术语 前面我们讲到过正则表达式字符等,上一篇分享了面向对象编程和类的结构,最后稍微提到了继承. Python面向对象编程:深度认识类class_ Pytho ...

  5. 《Python面向对象编程指南》——1.2 基类中的__init__()方法

    本节书摘来自异步社区<Python面向对象编程指南>一书中的第1章,第1.2节,作者[美]Steven F. Lott, 张心韬 兰亮 译,更多章节内容可以访问云栖社区"异步社区 ...

  6. Python 面向对象 基础

    编程范式概述: 面向过程 和 面向对象 以及函数式编程 面向过程:(Procedure Oriented)是一种以事件为中心的编程思想. 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实 ...

  7. python面向对象类属性_python面向对象之类属性和类方法案例分析

    本文实例讲述了python面向对象之类属性和类方法.分享给大家供大家参考,具体如下: 目标 类的结构 类属性和实例属性 类方法和静态方法 01. 类的结构 1.1 术语 -- 实例 使用面相对象开发, ...

  8. 关于python面向对象编程中、下列说法中_关于Python面向对象编程的知识点总结

    前言 如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程. 接下来我们 ...

  9. python对象编程例子-这是我见过最详细的Python面向对象编程!建议收藏!

    原标题:这是我见过最详细的Python面向对象编程!建议收藏! 面向对象编程和函数式编程(面向过程编程)都是程序设计的方法,不过稍有区别. 面向过程编程: 1. 导入各种外部库 2. 设计各种全局变量 ...

  10. python面向对象编程的优点-Python面向对象编程——总结面向对象的优点

    Python面向对象编程--总结面向对象的优点 一.从代码级别看面向对象 1.在没有学习类这个概念时,数据与功能是分离的 def exc1(host,port,db,charset): conn=co ...

最新文章

  1. 百万奖金!交通事件、医学病理、广告检测,江苏大数据开发与应用大赛报名...
  2. 关于@DateTimeFormat 和 @JsonFormat 注解
  3. git 可视化工具_Git的基本使用(二)
  4. mysql8.0.19初始密码输入错误_MySQL 8.0.19支持输入3次错误密码锁定账户功能(例子)...
  5. python爬取豆瓣电影top250_用Python爬虫实现爬取豆瓣电影Top250
  6. 访问远程Visdom
  7. 对select into表复制的一点思考
  8. 空间数据分析与R语言实践
  9. gbase数据库锁表解决办法
  10. Dart判断字符串是否为空
  11. redhat linux 下小企鹅输入法fcitx的安装
  12. python调用百度地图API 实现单点沿线轨迹运动
  13. 用Java实现用户登录界面
  14. JIRA部署破解和confluence整合
  15. 后辈悼王江民先生文(文言文)
  16. 大赛征集令|首届“万应杯”低代码应用开发大赛报名开启啦!
  17. TP-link WR720N路由器刷入OpenWrt
  18. VS code实现前后端交互及大屏可视化(Flask+Mysql+Echarts+HTML+JS+CSS)
  19. 【机器学习】模型评估与选择--西瓜书第二章
  20. 厦门信息计算机专业录取分数,厦门大学计算机类专业2016年在福建理科高考录取最低分数线...

热门文章

  1. cisco 2900企业级系列路由器初始配置
  2. 中国移动的用户ARPU重新进入上升通道,员工薪酬也稳步上涨
  3. 关于github的高级搜索技巧
  4. 10月14日笔记交叉开发开发板连接,远程登录和tftp服务器配置
  5. Java小游戏系列之华容道
  6. 慧荣SM2263XT+4贴B16A开卡成功,附量产工具
  7. 计算机软件优化,如何优化计算机软件系统
  8. CC0与商业IP:哪个更好?
  9. 无线通信基础知识7:射频器件的基本参数3
  10. 【左程云Java算法】Chapter1-5:用一个栈实现另一个栈的排序