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


Posted in Python onJuly 25, 2018

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

# -*- coding:utf-8 -*-
#!python3
class Person():
  def __init__(self, name, age):
    self.name = name
    self.age = age
p1 = Person('ff', '28')
print(p1.name, p1.age)
# 给实例对象动态添加sex属性
p1.sex = 'female'
print(p1.sex)
# 给类动态添加属性
Person.height = None
print(Person.height)
p1.height = '155'
print(p1.height)
# 动态定义一个方法
def run(self, speed):
  print('run with %d speed' % speed)
# 给实例绑定方法
import types
p1.run = types.MethodType(run, p1)
p1.run(30)
# Person.run = run # 运行错误 
# Person.run(4)
@classmethod
def run2(a, speed):
  print('run with %d m/s' % speed)
# 给类动态绑定方法
Person.run2 = run2    # 给类绑定的方法, 需加修饰器 @classmethod, 标定其为类方法,可被类添加
Person.run2(4)
p1.run2(5)       # 类的实例对象也可调用类动态添加的方法
@staticmethod
def eat():
  print('eat---')
Person.eat = eat    # 类可添加静态方法, 定义静态方法时,需加修饰器@staticmethod
Person.eat()
p1.eat()        # 实例对象同样可调用类动态添加的静态方法
del p1.name       # del 删除属性
delattr(p1, 'sex')
print(p1.name, p1.sex)

运行结果:

ff 28
female
None
155
run with 30 speed
run with 4 m/s
run with 5 m/s
eat---
eat---
Traceback (most recent call last):
  File "/home/python/Desktop/test/12_动态语言.py", line 41, in <module>
    print(p1.name, p1.sex)
AttributeError: 'Person' object has no attribute 'name'

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

Python 相关文章推荐
Python获取单个程序CPU使用情况趋势图
Mar 10 Python
python常规方法实现数组的全排列
Mar 17 Python
Python读写文件方法总结
Jun 09 Python
Python读取txt文件数据的方法(用于接口自动化参数化数据)
Jun 27 Python
python在html中插入简单的代码并加上时间戳的方法
Oct 16 Python
python 梯度法求解函数极值的实例
Jul 10 Python
在Pytorch中计算自己模型的FLOPs方式
Dec 30 Python
Python3 pickle对象串行化代码实例解析
Mar 23 Python
解决python运行启动报错问题
Jun 01 Python
python类共享变量操作
Sep 03 Python
Python批量获取并保存手机号归属地和运营商的示例
Oct 09 Python
手把手教你用Django执行原生SQL的方法
Feb 18 Python
利用pandas读取中文数据集的方法
Jul 25 #Python
利用pandas进行大文件计数处理的方法
Jul 25 #Python
使用python验证代理ip是否可用的实现方法
Jul 25 #Python
Python+Pandas 获取数据库并加入DataFrame的实例
Jul 25 #Python
python requests 测试代理ip是否生效
Jul 25 #Python
Python使用pymysql从MySQL数据库中读出数据的方法
Jul 25 #Python
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
Jul 25 #Python
You might like
php的ajax框架xajax入门与试用介绍
2010/12/19 PHP
解析左右值无限分类的实现算法
2013/06/20 PHP
php使用MySQL保存session会话的方法
2015/06/18 PHP
php中的异常和错误浅析
2017/05/03 PHP
PHP实现数组向任意位置插入,删除,替换数据操作示例
2019/04/05 PHP
jquery ajax提交表单数据的两种实现方法
2010/04/29 Javascript
js限制文本框只能输入数字(正则表达式)
2012/07/15 Javascript
JavaScript 操作table,可以新增行和列并且隔一行换背景色代码分享
2013/07/05 Javascript
如何在父窗口中得知window.open()出的子窗口关闭事件
2013/10/15 Javascript
JS中使用sort结合localeCompare实现中文排序实例
2014/07/23 Javascript
js的[defer]和[async]属性
2014/11/24 Javascript
详解Bootstrap四种图片样式
2016/01/04 Javascript
基于原生js淡入淡出函数封装(兼容IE)
2016/10/20 Javascript
BootStrap轻松实现微信页面开发代码分享
2016/10/21 Javascript
js实现鼠标拖拽多选功能示例
2017/08/01 Javascript
移动端触摸滑动插件swiper使用方法详解
2017/08/11 Javascript
Angular4的输入属性与输出属性实例详解
2017/11/29 Javascript
jQuery md5加密插件jQuery.md5.js用法示例
2018/08/24 jQuery
VUE+Element环境搭建与安装的方法步骤
2019/01/24 Javascript
JavaScript中filter的用法实例分析
2019/02/27 Javascript
Vue项目实现换肤功能的一种方案分析
2019/08/28 Javascript
vue使用canvas实现移动端手写签名
2020/09/22 Javascript
[01:13:08]2018DOTA2亚洲邀请赛4.6 淘汰赛 mineski vs LGD 第二场
2018/04/10 DOTA
python实现删除文件与目录的方法
2014/11/10 Python
python使用装饰器和线程限制函数执行时间的方法
2015/04/18 Python
Python 遍历子文件和所有子文件夹的代码实例
2016/12/21 Python
python+PyQT实现系统桌面时钟
2020/06/16 Python
django与小程序实现登录验证功能的示例代码
2019/02/19 Python
Django实现web端tailf日志文件功能及实例详解
2019/07/28 Python
瑞典在互联网上最大的宠物商店:Animail
2020/10/31 全球购物
英国豪华家具和经典家居饰品购物网站:OKA
2020/06/05 全球购物
巴西最大的巴士票务门户:Quero Passagem
2020/11/21 全球购物
骨干教师培训制度
2014/01/13 职场文书
文秘自荐信
2014/06/28 职场文书
红色革命电影观后感
2015/06/18 职场文书
2019脱贫攻坚工作总结报告范本!
2019/08/06 职场文书