1 types.MethodType的作用—添加实例方法

import types

class cla(object):
def __init__(self, name, age):
self.name = name
self.age = age def prii(self):
print("pri") def f1(self):
print("f1") c = cla("zhangsan", 40) c.prii() c.f1=types.MethodType(f1,c) c.f1() xxx=types.MethodType(f1,c) xxx()
pri
f1
f1
 ↑可以看到,xxx()一样可以正常的执行。所以这个动态添加的办法和原生的属性还是有所区别的。执行了types.MethodType(f1,c)之后,相当于产生了一个特殊返回值,这个返回值指向的f1的函数代码,里面已经被默认传递了c对象作为参数,只要使用这个返回值,就可以当做是调用了对象的方法。
  c.f1=types.MethodType(f1,c)这么写之后,再调用c.f1(),完全是为了字面上的符合,符合这个操作的原意而已。

2 types.MethodType的作用—添加静态方法

在使用静态方法时,类中的self将不会再进行传值,此时,静态方法已经和类没什么关系了。
  需要通过修饰器@staticmethod来进行修饰,静态方法不需要多定义参数。

import types

class cla(object):
def __init__(self, name, age):
self.name = name
self.age = age def prii(self):
print("pri") def f1(self):
print("f1") #@符号,要想起装饰器!
@staticmethod
def test():
print(":static") c = cla("zhangsan", 40) #这里不也不是必须叫cla.test,随便都可以
cla.test=test
cla.test()
:static

↑这里不需要绑定,因为静态方法不需要任何的参数,只要赋值了就直接用。注意要使用类名来调用。

3 types.MethodType的作用—添加类方法

import types

class cla(object):
def __init__(self, name, age):
self.name = name
self.age = age def prii(self):
print("pri") def f1(self):
print("f1") @staticmethod
def test():
print(":static") @classmethod
def clsm(cls):
print("classmethod call") c = cla("zhangsan", 40) cla.clsm=clsm cla.clsm()
classmethod call

↑类方法也是直接赋值调用就行。

  动态添加可以做到什么呢?一款APP,在没有进行整个APP的情况下,里面的部分功能变了。即我部分的功能代码存在一个文件中,我在后台默默更换这些文件,下次你再打开APP,对应的功能或者样式就变了。

最新文章

  1. 《InsideUE4》-4-GamePlay架构(三)WorldContext,GameInstance,Engine
  2. PE530 : GCD of Divisors
  3. 20161025__Oracle10g双机备份
  4. 多屏判断css改写
  5. TigerLeapMC V1.3 for Windows(支持DLNA)
  6. QT线程(二)---线程同步
  7. Activity启动模式图文详解
  8. JS中的for和for in循环
  9. 让rdlc报表在ReportViewer中水平居中的方法
  10. oracle 集合变量以及自定义异常的用法
  11. HTML5分析实战WebSockets一个简短的引论
  12. Win7配置IIS7
  13. 关于ftp出现425错误
  14. 201621123057 《Java程序设计》第10周学习总结
  15. Mapjoin和Reducejoin案例
  16. 一种导致 emwin 中 EDIT 控件不显示的情况
  17. 多线程系列(3)任务Task
  18. PAT L2-010 排座位(floyd)
  19. 如何处理好前后端分离的 API 问题(转载自知乎)
  20. Linux 系统的文件类型

热门文章

  1. SSM-maven 简单整合
  2. Linux系统管理——初学者建议
  3. C++ 网教通直播刷屏反制 (思路启发)
  4. VS Code项目中共享自定义的代码片段方案
  5. (四)Maven项目工程目录约定
  6. [置顶] linux中fork()函数详解(原创!!实例讲解)
  7. Web前端 -- Webpack
  8. c++虚函数和虚继承
  9. AOF文件的写入与同步
  10. 学习Linux必须掌握的一个知识-i节点