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备份文件的脚本
Aug 11 Python
Python 实现文件的全备份和差异备份详解
Dec 27 Python
Python正则抓取网易新闻的方法示例
Apr 21 Python
Python守护线程用法实例
Jun 23 Python
centos6.4下python3.6.1安装教程
Jul 21 Python
Python自动化运维之IP地址处理模块详解
Dec 10 Python
Python3正则匹配re.split,re.finditer及re.findall函数用法详解
Jun 11 Python
python3去掉string中的标点符号方法
Jan 22 Python
Django使用redis缓存服务器的实现代码示例
Apr 28 Python
Python 类的私有属性和私有方法实例分析
Sep 29 Python
Python类super()及私有属性原理解析
Jun 15 Python
python删除指定列或多列单个或多个内容实例
Jun 28 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的微信公众平台开发入门实例
2015/04/15 PHP
PHP基于递归算法解决兔子生兔子问题
2018/05/11 PHP
php5.6.x到php7.0.x特性小结
2019/08/17 PHP
Prototype1.5 rc2版指南最后一篇之Position
2007/01/10 Javascript
jQuery基础知识filter()和find()实例说明
2010/07/06 Javascript
理解Javascript_14_函数形式参数与arguments
2010/10/20 Javascript
ExtJs Excel导出并下载IIS服务器端遇到的问题
2011/09/16 Javascript
jQuery父级以及同级元素查找介绍
2013/09/04 Javascript
js 3种归并操作的实例代码
2013/10/30 Javascript
javascript数字时钟示例分享
2014/04/23 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/06/05 Javascript
JS定义网页表单提交(submit)的方法
2015/03/20 Javascript
基于JQuery打造无缝滚动新闻步骤详解
2016/03/31 Javascript
利用Angularjs和Bootstrap前端开发案例实战
2016/08/27 Javascript
node.js中 stream使用教程
2016/08/28 Javascript
原生js实现旋转木马轮播图效果
2017/02/27 Javascript
在vscode中统一vue编码风格的方法
2018/02/22 Javascript
jQuery实现基本隐藏与显示效果的方法详解
2018/09/05 jQuery
vue 指令之气泡提示效果的实现代码
2018/10/18 Javascript
使用Angular Cli如何创建Angular私有库详解
2019/01/30 Javascript
详解基于React.js和Node.js的SSR实现方案
2019/03/21 Javascript
微信小程序复选框实现多选一功能过程解析
2020/02/14 Javascript
解决vue无法侦听数组及对象属性的变化问题
2020/07/17 Javascript
vue实现动态给id赋值,点击事件获取当前点击的元素的id操作
2020/11/09 Javascript
Vue实现点击当前行变色
2020/12/14 Vue.js
[03:43]2014DOTA2西雅图国际邀请赛 newbee战队巡礼
2014/07/07 DOTA
python实现合并两个数组的方法
2015/05/16 Python
Python用5行代码实现批量抠图的示例代码
2020/04/14 Python
解决windows上安装tensorflow时报错,“DLL load failed: 找不到指定的模块”的问题
2020/05/20 Python
html5设计原理(推荐收藏)
2014/05/17 HTML / CSS
波兰在线儿童和婴儿用品零售商:pinkorblue
2019/06/29 全球购物
迪士尼法国在线商店:shopDisney FR
2020/12/03 全球购物
2014员工聘用协议书(最新版)
2014/11/24 职场文书
会议接待欢迎词范文
2015/01/26 职场文书
实验心得体会范文
2016/01/25 职场文书
电子表的操作介绍说明书
2019/10/28 职场文书