python面向对象-2
动态添加实例方法:
使用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.")
运算符重载
作用:
- 让自定义的实例像内建对象一样进行运算符操作
- 让程序简洁易读
- 对自定义对象将运算符赋予新的规则
算术运算符的重载:
方法名 运算符和表达式 说明
__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相关推荐
- python面向对象的优点_Python面向对象编程——总结面向对象的优点
Python面向对象编程--总结面向对象的优点 一.从代码级别看面向对象 1.在没有学习类这个概念时,数据与功能是分离的 def exc1(host,port,db,charset): conn=co ...
- 这可能是Python面向对象编程的最佳实践
作者 | 崔庆才 来源 | 进击的Coder(ID:FightingCoder) Python 是支持面向对象的,很多情况下使用面向对象编程会使得代码更加容易扩展,并且可维护性更高,但是如果你写的多了 ...
- 第八课.Python面向对象(二)
类的继承和多态 继承和多态与函数有共同的目的,都是为了减少代码的冗余,提高复用的效率: 根据"Python面向对象(一)"的笔记,我现在定义一个Cinema类: #父类 class ...
- Python面向对象编程:类继承和其衍生术语
Python面向对象编程03:类继承和其衍生术语 前面我们讲到过正则表达式字符等,上一篇分享了面向对象编程和类的结构,最后稍微提到了继承. Python面向对象编程:深度认识类class_ Pytho ...
- 《Python面向对象编程指南》——1.2 基类中的__init__()方法
本节书摘来自异步社区<Python面向对象编程指南>一书中的第1章,第1.2节,作者[美]Steven F. Lott, 张心韬 兰亮 译,更多章节内容可以访问云栖社区"异步社区 ...
- Python 面向对象 基础
编程范式概述: 面向过程 和 面向对象 以及函数式编程 面向过程:(Procedure Oriented)是一种以事件为中心的编程思想. 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实 ...
- python面向对象类属性_python面向对象之类属性和类方法案例分析
本文实例讲述了python面向对象之类属性和类方法.分享给大家供大家参考,具体如下: 目标 类的结构 类属性和实例属性 类方法和静态方法 01. 类的结构 1.1 术语 -- 实例 使用面相对象开发, ...
- 关于python面向对象编程中、下列说法中_关于Python面向对象编程的知识点总结
前言 如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程. 接下来我们 ...
- python对象编程例子-这是我见过最详细的Python面向对象编程!建议收藏!
原标题:这是我见过最详细的Python面向对象编程!建议收藏! 面向对象编程和函数式编程(面向过程编程)都是程序设计的方法,不过稍有区别. 面向过程编程: 1. 导入各种外部库 2. 设计各种全局变量 ...
- python面向对象编程的优点-Python面向对象编程——总结面向对象的优点
Python面向对象编程--总结面向对象的优点 一.从代码级别看面向对象 1.在没有学习类这个概念时,数据与功能是分离的 def exc1(host,port,db,charset): conn=co ...
最新文章
- 百万奖金!交通事件、医学病理、广告检测,江苏大数据开发与应用大赛报名...
- 关于@DateTimeFormat 和 @JsonFormat 注解
- git 可视化工具_Git的基本使用(二)
- mysql8.0.19初始密码输入错误_MySQL 8.0.19支持输入3次错误密码锁定账户功能(例子)...
- python爬取豆瓣电影top250_用Python爬虫实现爬取豆瓣电影Top250
- 访问远程Visdom
- 对select into表复制的一点思考
- 空间数据分析与R语言实践
- gbase数据库锁表解决办法
- Dart判断字符串是否为空
- redhat linux 下小企鹅输入法fcitx的安装
- python调用百度地图API 实现单点沿线轨迹运动
- 用Java实现用户登录界面
- JIRA部署破解和confluence整合
- 后辈悼王江民先生文(文言文)
- 大赛征集令|首届“万应杯”低代码应用开发大赛报名开启啦!
- TP-link WR720N路由器刷入OpenWrt
- VS code实现前后端交互及大屏可视化(Flask+Mysql+Echarts+HTML+JS+CSS)
- 【机器学习】模型评估与选择--西瓜书第二章
- 厦门信息计算机专业录取分数,厦门大学计算机类专业2016年在福建理科高考录取最低分数线...