python创建变量_Python每天一分钟:给类对象动态新增/删除成员变量和方法(函数)...
一般类对象新增变量或方法的过程
在面向对象(OOP)的编程方法中,如果需要给实例化的类对象新增方法或者属性,一般都是在class类的定义中新增内容,然后才能用类对象来调用新增的方法或变量。如在C++中:
C++示例类
如果此时开发人员需要为类对象p新增一个变量age和一个方法weigh()都是通过修改类的原始定义:
C++类新增成员
然而在python中给类对象新增变量或者方法并不需要对原始类定义进行重新修改,随时都可以给类对象新增成员。
pythonyu'yan
那么下面就以下图中的代码为例,为大家演示如何给python中的类对象动态的添加变量/属性和方法:
python示例类
给类对象动态添加成员变量
Python 支持为已创建好的对象动态增加实例变量而不会改变类的原始定义!方法很简单,只需要给类对象的新变量赋值即可,如给示例代码中的对象p新增性别变量sex:
# 为p对象增加一个sex实例变量,直接声明即可p.sex = "男"print(p.sex)运行结果为:男
上述代码为 p 对象动态新增了一个 sex实例变量,即直接对p对象的sex实例变量赋值就能新增一个实例变量。那么如何删除这个动态变量呢?
python也支持动态删除实例变量,使用del语句即可删除,如删除类对象p的name成员变量:
# 删除p对象的name实例变量del p.name# 再次访问p的name实例变量print(p.name)运行结果为:lisi
上述代码使用del动态删除了已经创建好的 p 对象的 name 实例变量,但因类中定义了类变量 name,故程序不会报错;否则会报出 AttributeError 错误,并提示:'Person' object has no attribute 'name'。
给类对象动态添加方法/函数
注意:初学者在理解以下内容之前,需清楚python类中 self 参数的含义和作用,可自行搜索查阅:Python中self的用法!
Python 同时支持为类对象动态新增方法,示例代码中的Person类只定义了一个 height() 方法,而实际使用时,开发人员完全可以为p对象动态增加方法:
两种新增类对象函数的方法
说明:为p对象动态增加方法时,Python 不会自动将调用者自动绑定到类方法的第一个参数self(即使将第一个参数命名为 self 也没用)。通俗的说就是虽然代码形式上(p.weigh())声明了对象p的新方法,但实际上python并不知道该方法是属于对象p的成员方法,需要用代码p.weigh(p)来手动绑定方法weigh()为对象p的新方法。
另一种实现上述绑定功能的方法:使用MethodType模块
def intro_func(self, content):print("("我是一个人")# 导入MethodTypefrom types import MethodType# 使用MethodType对intro_func进行包装,将该函数的第一个参数绑定为pp.intro = MethodType(intro_func, p)# 第一个参数已经绑定了,无需传入p.intro("新增了方法intro,功能由intro_func()实现")
上述代码中,通过 MethodType 包装 intr_func 函数之后,为p对象动态增加的 intro() 方法的第一个参数self就绑定了对象p,因此程序在调用intro() 方法时就自动将intro方法归为p对象的成员方法,而无须传入第一个参数self,功能与在定义Person类时己经定义了 intro() 方法一样。
完整代码演示
完整代码示例
总结
为类对象动态添加成员变量或成员方法是python类操作中非常人性化的设计,在python编程中作用明显,希望本文内容有助于读者学习/工作!最后感谢您的阅读!
谢谢
python创建变量_Python每天一分钟:给类对象动态新增/删除成员变量和方法(函数)...相关推荐
- python创建列表_python创建与遍历List二维列表的方法
python 创建List二维列表 lists = [[] for i in range(3)] # 创建的是多行三列的二维列表 for i in range(3): lists[0].append( ...
- python 创建子类_python创建子类的方法分析
本文实例讲述了python创建子类的方法.分享给大家供大家参考,具体如下: 如果你的类没有从任何祖先类派生,可以使用object作为父类的名字.经典类的声明唯一不同之处在于其没有从祖先类派生---此时 ...
- python 竖线 绘图_Python可视化 | Seaborn5分钟入门(二)——barplot countplot
Seaborn是基于matplotlib的Python可视化库. 它提供了一个高级界面来绘制有吸引力的统计图形.Seaborn其实是在matplotlib的基础上进行了更高级的API封装,从而使得作图 ...
- python创建追加_Python文件的创建与追加
(转载)https://www.xshell.net/python/python_open.html Posted by 破冰 on 2013-9-17 17:29 Tuesday 一.用Python ...
- python创建矩阵_Python创建对称矩阵的方法示例【基于numpy模块】
本文实例讲述了Python创建对称矩阵的方法.分享给大家供大家参考,具体如下: 对称(实对称)矩阵也即: step 1:创建一个方阵 >>> import numpy as np & ...
- 如何用python创建文件_python在指定目录创建文件
Python无法创建文件夹,如何制定创建目录?温柔也好,凶狠也罢.想有一个陌生的自己,给自己一些惊喜. /主目录/桌面/gnssIR_python-master:/usr/local/bin:/usr ...
- python类的成员函数_Python为类对象动态添加成员函数
Python: 为对象动态添加函数 , 且函数定义 来自一个 str 在 Python 中 , 通常情况下 , 你只能为对象添加一个已经写好的方法 需求 : 传入一个 str 类型的变量 , 其值是一 ...
- python关键字定义_python使用什么关键字定义类
详细内容 什么是类? 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 什么是方法? 类中的函数即为方法 如何定义一个类? 定义类,语法格式如下: ...
- python定义一个_Python,包括定义一个类
我有一个我要解决的问题: 编写一个包含以下内容的类contentResult的定义: •String类型的实例变量winner,初始化为空字符串.在 •String类型的实例变量second_plac ...
最新文章
- mysql grant all详解_MySQL grant 语法的详细解析
- python 系统进程_在Python中监视所有系统进程
- mysql 高可用测试_mysql MHA高可用测试
- mysql 优化not null_mysql 优化之11:尽可能的使用 NOT NULL
- oracle临时表经常被锁_这是一篇长篇入门级数据库讲解:oracle数据库数据导入导出步骤
- android recyclerview添加头部,Android RecyclerView添加Header头部
- Decide what you want,and go after it with everything you got!
- 零库存挑战-分压电阻选择器V1.01【下载地址发布】
- 软件工程计算机专业基于SSM的汽车租赁管理系统 I的毕业论文
- IP静态路由实验(基于华为eNSP模拟器)
- SSH远程控制与访问
- 阿里云 Linux 3 安装mysql 亲测有效
- 微信小程序复用公众号资质快速认证
- JS 如何调用高德地图
- [PaPaPa][需求说明书][V0.1]
- java多线程 丢数据_多线程list.add()丢数据
- Vue项目中使用字体文件库
- 树莓派安装tensorflow(玩转树莓派(三))
- Spring六:Spring AOP API 上
- 赛元单片机-触摸库使用总结
热门文章
- Git根据commitId查看提交内容:根据commitId查看某次提交的内容
- Linux的Nginx四:功能|模块
- java preparedstatement 关闭_java - 如果基础连接已关闭,为什么isClosed()方法对PreparedStatements不返回true? - 堆栈内存溢出...
- android view超出屏幕_Android APP界面保持屏幕常亮方法
- 给array添加元素_前囧(06篇)Array 方法详解
- openshift安装部署_OpenShift 4 HOL (1) - 多种方法部署容器化应用
- 扬州大学广陵学院计算机网络试卷,扬州大学广陵学院控制工程考试样卷B.doc
- android xe 调用 java,Delphi XE6 for Android 让手机震动(调用Java的函数)
- Spring MVC @ModelAttribute 数据绑定
- 【mybatis mapper XML】List类型入参参数处理