Python实现动态给类和对象添加属性和方法操作示例


Posted in Python onFebruary 29, 2020

本文实例讲述了Python实现动态给类和对象添加属性和方法操作。分享给大家供大家参考,具体如下:

动态给类和对象添加属性

定义一个Person类

class Person(object):
 def __init__(self, name):
  self.name = name
  • 给对象添加属性
# 创建2个Person,分别为p1,p2
p1 = Person('amy')
print(p1.name)
p1.age = 10   # 给p1对象添加属性
print(p1.age)  # 输出10
p2 = Person('anne')
print(p2.name)  
p2.age = 18   # 给p2对象添加属性
print(p2.age)  # 输出18

运行结果:

amy
10
anne
18

  • 给类添加属性
p1 = Person('amy')
p2 = Person('anne')
Person.sex = 'female'
print(p1.sex) # 输出 female
print(p2.sex) # 输出 female
p2.sex = 'male'
print(p2.sex) # 输出 male

运行结果:

female
female
male

动态给类和对象添加方法

  • 动态给类添加方法
# 在类的外部定义一个sleep函数
p1 = Person('amy')
p2 = Person('anne')
def sleep(self):
 print('%s sleep' % (self.name))
Person.sleep = sleep
Person.sleep(p1)  # 输出 amy sleep
Person.sleep(p2)  # 输出 anne sleep

运行结果:

amy sleep
anne sleep

  • 给对象添加方法
import types # 如果是给对象动态添加方法,需要导入types模块
p = Person('amy')
def eat(self):
 print('%s eat' % (self.name))
p.eat = types.MethodType(eat, p) # 调用MethodType()函数,参数1:方法名,参数2:对象名
p.eat()    # 输出 amy eat

运行结果:

amy eat

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python中二维阵列的变换实例
Oct 09 Python
Python实现二叉堆
Feb 03 Python
深入理解Python中变量赋值的问题
Jan 12 Python
python删除不需要的python文件方法
Apr 24 Python
详解Django中间件执行顺序
Jul 16 Python
PyQt5实现QLineEdit添加clicked信号的方法
Jun 25 Python
Django框架 查询Extra功能实现解析
Sep 04 Python
Numpy之reshape()使用详解
Dec 26 Python
详解Python中namedtuple的使用
Apr 27 Python
Python urllib2运行过程原理解析
Jun 04 Python
python实现Nao机器人的单目测距
Sep 04 Python
Python Django / Flask如何使用Elasticsearch
Apr 19 Python
Python使用type动态创建类操作示例
Feb 29 #Python
Django框架静态文件处理、中间件、上传文件操作实例详解
Feb 29 #Python
Python编程快速上手——强口令检测算法案例分析
Feb 29 #Python
Python编程快速上手——strip()函数的正则表达式实现方法分析
Feb 29 #Python
python通用读取vcf文件的类(复制粘贴即可用)
Feb 29 #Python
Python编程快速上手——疯狂填词程序实现方法分析
Feb 29 #Python
Python使用GitPython操作Git版本库的方法
Feb 29 #Python
You might like
谈谈PHP语法(5)
2006/10/09 PHP
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
2013/06/25 PHP
常用的php图片处理类(水印、等比缩放、固定高宽)分享
2015/06/19 PHP
php中的抽象方法和抽象类
2017/02/14 PHP
PHP实现下载远程图片保存到本地的方法
2017/06/19 PHP
TNC vs BOOM BO3 第一场2.13
2021/03/10 DOTA
HTML中不支持静态Expando的元素的问题
2007/03/08 Javascript
一个简单的网站访问JS计数器 刷新1次加1次访问
2012/09/20 Javascript
jQuery setTimeout()函数使用方法
2013/04/07 Javascript
jQuery图片的展开和收缩实现代码
2013/04/16 Javascript
ie与ff下的event事件使用介绍
2013/11/25 Javascript
jquery取消选择select下拉框示例代码
2014/02/22 Javascript
基于JavaScript制作霓虹灯文字 代码 特效
2015/09/01 Javascript
学习javascript面向对象 javascript实现继承的方式
2016/01/04 Javascript
Windows 系统下设置Nodejs NPM全局路径
2016/04/26 NodeJs
Angular工具方法学习
2016/12/26 Javascript
bootstrap导航、选项卡实现代码
2016/12/28 Javascript
基于jQuery实现数字滚动效果
2017/01/16 Javascript
解决OneThink中无法异步提交kindeditor文本框中修改后的内容方法
2017/05/05 Javascript
vue cli安装使用less的教程详解
2019/07/12 Javascript
[01:05:41]EG vs Optic Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
python中from module import * 的一个坑
2014/07/20 Python
使用python为mysql实现restful接口
2018/01/05 Python
python表格存取的方法
2018/03/07 Python
Python动态参数/命名空间/函数嵌套/global和nonlocal
2019/05/29 Python
python list多级排序知识点总结
2019/10/23 Python
html5的canvas元素使用方法介绍(画矩形、画折线、圆形)
2014/04/14 HTML / CSS
理肤泉美国官网:La Roche-Posay
2018/01/17 全球购物
毕业生文员求职信
2013/11/03 职场文书
高中体育教学反思
2014/01/24 职场文书
函授自我鉴定范文
2014/02/06 职场文书
通用自荐信范文
2014/03/14 职场文书
副护士长竞聘演讲稿
2014/04/30 职场文书
个人三严三实对照检查材料思想汇报
2014/09/22 职场文书
企业开业庆典答谢词
2015/01/20 职场文书
Vue Element plus使用方法梳理
2022/12/24 Vue.js