python__高级 : 动态添加 对象属性, 类属性, 对象实例方法, 类静态方法, 类方法
给对象添加实例属性,可以直接这样 t.age = 18 ( 假设 t = Test() ) 给类添加类属性 , 也可以直接这样 Test.age = 18
那给对象添加实例方法,可以在类外面先定义一个函数 然后 用 types.MethodType() 方法 把 函数绑定到对象的一个属性上面:
class Test(object):
def __init__(self, newName):
self.name = newName
def printName(self):
print('输出名字------%s----' %self.name)
t = Test('Jack')
t.printName = types.MethodType(printName, t)
t.printName()
>>>输出名字------Jack----
这个地方的 t.printName 其实并不是一个方法, 而是存储了 printName 函数的引用, types.MethodType() 的作用是把 函数的self 变成 t ,所以打印的是 t.name .
给类添加静态方法,也是先在外边定义一个静态方法,然后直接一个类属性指向这个静态方法就可以 :
class Test(object):
def __init__(self, newName):
self.name = newName
@staticmethod
def printName():
print('输出名字------111----')
Test.printName = printName
Test.printName()
>>>输出名字----------
因为静态方法一般不需要参数,所以直接一个类属性 Test.printName 指向这个静态方法就行.
同理,给类添加类方法和添加静态方法差不多:
class Test(object):
a =
def __init__(self, newName):
self.name = newName
@classmethod
def printName(cls):
print('输出名字------%s----' % cls.a)
Test.printName = printName
Test.printName()
>>>输出名字----------
只不过 在调用类方法的时候会自动的把类的名字传递给后来添加上的类方法, 所以 cls.a 就是 Test.a
python__高级 : 动态添加 对象属性, 类属性, 对象实例方法, 类静态方法, 类方法的更多相关文章
- 转: javascript动态添加、修改、删除对象的属性和方法
在其他语言中,对象一旦生成,就不可更改了,要为一个对象添加修改成员必须要在对应的类中修改,并重新实例化,而且程序必须经过重新编译.JavaScript 中却非如此,它提供了灵活的机制来修改对象的行为, ...
- javascript动态添加、修改、删除对象的属性与方法
在其他语言中,对象一旦生成,就不可更改了,要为一个对象添加修改成员必须要在对应的类中修改,并重新实例化,而且程序必须经过重新编译.JavaScript 中却非如此,它提供了灵活的机制来修改对象的行为, ...
- jquery动态添加删除div--事件绑定,对象克隆
我想做一个可以动态添加删除div的功能.中间遇到一个问题,最后在manong123.com开发文摘 版主的热心帮助下解答了(答案在最后) 使用到的jquery方法和思想就是:事件的绑定和销毁(unbi ...
- js学习(一)-动态添加、修改、删除对象的属性和方法
//-----------------------js代码--------------------------- function class1(){ } //-------------------- ...
- 04JS高级动态添加属性和删除属性
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- python类属性 静态方法
实例 实例就是由对象创建出来的实实在在的存在 创建出来的对象叫做类的实例 创建对象的动作叫做实例化 对象的属性叫做实例的属性 对象调用的方法叫做实例方法 类是一个特殊的对象 类属性 类属性 ...
- Runtime 方法替换 和 动态添加实例方法 结合使用
前言: 方法替换,可以替换任意外部类的方法,而动态添加方法只能实现在被添加类创建的对象里,但是将方法替换和动态添加方法结合使用,可以实现,对任意外部类动态添加需要的方法,这个方法可以是类方法也可以是实 ...
- Quartz 2.2 动态添加、修改和删除定时任务
QuartzManager.Java 动态添加.修改和删除定时任务管理类 import org.quartz.CronScheduleBuilder; import org.quartz.CronTr ...
- Quartz 2.3 动态添加、修改和删除定时任务
下面直接上代码: <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>qu ...
随机推荐
- mysql存储过程游标加计划任务事件调度器
存储过程加事件调度器 -- 存储过程 (多个)游标的使用 临时表的使用(让执行时间从一个小时降低到5分钟)DELIMITER $$ DROP PROCEDURE IF EXISTS `eval_cal ...
- [LeetCode]11. Container With Most Water 盛最多水的容器
Given n non-negative integers a1, a2, ..., an , where each represents a point at coordinate (i, ai). ...
- 解决jQuery在chrome中获取height为0
笔者之前在一家创业公司做过项目,当时遇到这么一个奇怪的问题,我需要用一个jQuery的height()方法获取一个div的高度,但是在chrome浏览器上面有时可以正常获取,但是同一个页面刷新多几次获 ...
- div的浮动(float)
什么是浮动 浮动,故名思议,就是移动位置. 之所以不叫移动,而叫浮动,那是因为给元素设置浮动后,元素会浮到文档上面来,术语叫脱离文档流. 例子 下面我们看例子 <html> <hea ...
- css3之图形绘制
由于近期的项目中出现了不规则的边框和图形, 所以重新温习一下CSS3的图形绘制...样式绘制的图形比图片的性能要好,体验更佳,关键一点是更加有趣! 以下几个例子主要是运用了css3中border.bo ...
- oracle笔记2-多表查询和子查询
--查询出当前用户下的所有表 select table_name from user_tables; --执行顺序原则: from where group by having select ...
- VS 打开时默认使用管理员权限
1. 打开VS的安装目录,找到devenv.exe,右键,选择“兼容性疑难解答”. 2. 选择“疑难解答程序” 3. 选择“该程序需要附加权限” 4. 确认用户帐户控制后,点击测试程序,不然这个对话框 ...
- 笨办法学Python(三十一)
习题 31: 作出决定 这本书的上半部分你打印了一些东西,而且调用了函数,不过一切都是直线式进行的.你的脚本从最上面一行开始,一路运行到结束,但其中并没有决定程序流向的分支点.现在你已经学了 if, ...
- TP5.0: 显示错误信息
在TP5中,我们运行的代码有错误无法执行时,只显示页面错误,而不显示错误信息 对我我来讲是无法接受滴!!毕竟我还是个小渣渣,查看了百度,解决方案是: 在application/config,php中找 ...
- BSP和JSP里的UI元素ID生成逻辑
CRM WebClient UI WebClient UI渲染出来的DOM元素的这些C#_W#格式的id是在哪行ABAP代码被生成出来的? 参考我的博客WebClient UI element ID ...