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实现apahce网站日志分析示例
Apr 02 Python
介绍Python中内置的itertools模块
Apr 29 Python
Python Flask框架模板操作实例分析
May 03 Python
python shapely.geometry.polygon任意两个四边形的IOU计算实例
Apr 12 Python
如何使用PyCharm引入需要使用的包的方法
Sep 22 Python
Flask-SocketIO服务端安装及使用代码示例
Nov 26 Python
Python 随机按键模拟2小时
Dec 30 Python
python Protobuf定义消息类型知识点讲解
Mar 02 Python
在Windows下安装配置CPU版的PyTorch的方法
Apr 02 Python
python文件名批量重命名脚本实例代码
Apr 22 Python
Python实现视频自动打码的示例代码
Apr 08 Python
Python各协议下socket黏包问题原理
Apr 12 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通用检测函数集合
2011/02/08 PHP
PHP通过iconv将字符串从GBK转换为UTF8字符集
2011/07/18 PHP
PHP文件操作实现代码分享
2011/09/01 PHP
phpexcel导出excel的颜色和网页中的颜色显示不一致
2012/12/11 PHP
探讨:php中在foreach中使用foreach ($arr as &amp;$value) 这种类型的解释
2013/06/24 PHP
PHP字符串word末字符实现大小写互换的方法
2014/11/10 PHP
php自动获取关键字的方法
2015/01/06 PHP
Laravel 5.4重新登录实现跳转到登录前页面的原理和方法
2017/07/13 PHP
js利用数组length属性清空和截短数组的小例子
2014/01/15 Javascript
js获取字符串字节数方法小结
2015/06/09 Javascript
6种javascript显示当前系统时间代码
2015/12/01 Javascript
JS当前页面登录注册框,固定DIV,底层阴影的实例代码
2016/09/29 Javascript
vue2滚动条加载更多数据实现代码
2017/01/10 Javascript
vue.js+Element实现表格里的增删改查
2017/01/18 Javascript
React学习笔记之事件处理(二)
2017/07/02 Javascript
浅谈Vue.js中ref ($refs)用法举例总结
2017/12/19 Javascript
Vue2.x Todo之自定义指令实现自动聚焦的方法
2019/01/08 Javascript
Vue实现购物车实例代码两则
2020/05/30 Javascript
详解JavaScript自定义函数
2020/07/29 Javascript
[07:57]2018DOTA2国际邀请赛寻真——PSG.LGD凤凰浴火
2018/08/12 DOTA
python爬虫之BeautifulSoup 使用select方法详解
2017/10/23 Python
Python科学计算包numpy用法实例详解
2018/02/08 Python
对python中的argv和argc使用详解
2018/12/15 Python
对Python中DataFrame选择某列值为XX的行实例详解
2019/01/29 Python
Python将列表数据写入文件(txt, csv,excel)
2019/04/03 Python
Python正则表达式实现简易计算器功能示例
2019/05/07 Python
Python函数和模块的使用总结
2019/05/20 Python
网易有道2017内推编程题 洗牌(python)
2019/06/19 Python
python之yield和Generator深入解析
2019/09/18 Python
CSS3 清除浮动的方法示例
2018/06/01 HTML / CSS
英国赛车、汽车改装和摩托车零件购物网站:Demon Tweeks
2018/10/29 全球购物
播音主持专业个人自我评价
2014/01/09 职场文书
小学生读书活动总结
2014/06/30 职场文书
2015年店长工作总结范文
2015/04/08 职场文书
办公用品质量保证书
2015/05/11 职场文书
剑指Offer之Java算法习题精讲二叉树的构造和遍历
2022/03/21 Java/Android