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实现mysql的单引号字符串过滤方法
Nov 14 Python
python 通过xml获取测试节点和属性的实例
Mar 31 Python
python打包压缩、读取指定目录下的指定类型文件
Apr 12 Python
利用Python实现在同一网络中的本地文件共享方法
Jun 04 Python
详解Python最长公共子串和最长公共子序列的实现
Jul 07 Python
Python OpenCV读取png图像转成jpg图像存储的方法
Oct 28 Python
Python从数据库读取大量数据批量写入文件的方法
Dec 10 Python
解决yum对python依赖版本问题
Jul 05 Python
python GUI库图形界面开发之PyQt5单行文本框控件QLineEdit详细使用方法与实例
Feb 27 Python
Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法详解
Mar 30 Python
keras-siamese用自己的数据集实现详解
Jun 10 Python
Python3 搭建Qt5 环境的方法示例
Jul 16 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
优化NFR之一 --MSSQL Hello Buffer Overflow
2006/10/09 PHP
thinkphp文件引用与分支结构用法实例
2014/11/26 PHP
JS的IE和Firefox兼容性集锦
2006/12/11 Javascript
Prototype Object对象 学习
2009/07/12 Javascript
ExtJs GridPanel简单的增删改实现代码
2010/08/26 Javascript
JQUERY对单选框(radio)操作的小例子
2013/04/25 Javascript
JS判断两个时间大小的示例代码
2014/01/28 Javascript
javascript简单性能问题及学习笔记
2014/02/04 Javascript
jquery浏览器滚动加载技术实现方案
2014/06/03 Javascript
node.js中的emitter.emit方法使用说明
2014/12/10 Javascript
js兼容pc端浏览器并有多种弹出小提示的手机端浮层控件实例
2015/04/29 Javascript
JQuery动态添加Select的Option元素实现方法
2016/08/29 Javascript
AngularJS解决ng界面长表达式(ui-set)的方法分析
2016/11/07 Javascript
基于ajax与msmq技术的消息推送功能实现代码
2016/12/26 Javascript
详解React中的组件通信问题
2017/07/31 Javascript
JavaScript基础之流程控制语句的用法
2017/08/31 Javascript
聊聊Vue 中 title 的动态修改问题
2019/06/11 Javascript
NodeJs crypto加密制作token的实现代码
2019/11/15 NodeJs
[57:53]Secret vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python从入门到精通(DAY 2)
2015/12/20 Python
Python调用微信公众平台接口操作示例
2017/07/08 Python
Python微信库:itchat的用法详解
2017/08/14 Python
Python中多个数组行合并及列合并的方法总结
2018/04/12 Python
python使用代理ip访问网站的实例
2018/05/07 Python
python使用thrift教程的方法示例
2019/03/21 Python
Css3+Js制作漂亮时钟(附源码)
2013/04/24 HTML / CSS
Born鞋子官网:Born Shoes
2017/04/06 全球购物
美国豪华时尚女性精品店:Kirna Zabête
2018/01/11 全球购物
捷克汽车配件和工具销售网站:TorriaCars
2018/02/26 全球购物
第一范式(1NF)、第二范式(2NF)和第三范式(3NF)之间的区别是什么?
2016/04/28 面试题
学校食品安全实施方案
2014/06/14 职场文书
市贸粮局召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
初中生思想道德自我评价
2015/03/09 职场文书
入党团支部推荐意见
2015/06/02 职场文书
学生会任命书范本
2015/09/21 职场文书
干货!开幕词的写作方法
2019/04/02 职场文书