1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > python创建变量_Python每天一分钟:给类对象动态新增/删除成员变量和方法(函数)...

python创建变量_Python每天一分钟:给类对象动态新增/删除成员变量和方法(函数)...

时间:2018-11-17 12:37:11

相关推荐

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编程中作用明显,希望本文内容有助于读者学习/工作!最后感谢您的阅读!

谢谢

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。