python动态绑定

Python019

python动态绑定,第1张

是因为你的使用方法不对。这个方法是给实例绑定方法用的,用来不会影响到其他实例:

class Stu(object):

def set_age(self,age):

self.age = 19

s=Stu() 

a=Stu() 

def set_age(self,age):

self.age = age

import types

a.set_age = types.MethodType(set_age, a)

a.set_age(15)

s.set_age(11)

print(s.age,a.age) # => (19, 15)

用MethodType方法更改了实例a的set_age方法,同类实例s并不受影响。

如果要给你一个类绑定方法:

class Stu(object):

pass 

s=Stu() 

a=Stu() 

def set_age(self,age):

self.age = age

import types

Stu.set_age = set_age 

a.set_age(15)

s.set_age(11)

print(s.age,a.age)

这样直接绑定就可以了。

给你这样一个例子吧,这个例子里面有动态增加类的函数

声明一个类,类初始化的时候读取配置文件,根据配置列表加载特定目录下的模块下的函数,函数和模块同名,将此函数动态加载为类的成员函数。

代码如下所示:

class WinBAS(Bas):

def __init__(self):

self.__baslist = {}

self.__Init_Modules()

pass

def __Init_Modules(self):

import modplugs

for m in modplugs.__moduleset__:

mh = __import__('modules.' + m)# + '.' + m)

ma = getattr(mh, m)# + '.' + m)

ma = getattr(ma, m)

setattr(self.__class__, m, ma)

modplugs.py是模块配置文件如下:

__moduleset__ = [

'BAS_GetUserList',

]

然后建立目录modules下面建立一个空的__init__.py文件,把目录变为一个包,在modules目录下建立真正的BAS_GetUserList实现:BAS_GetUserList文件中有个BAS_GetUserList函数如下:

def BAS_GetUserList(self, strs):

return [0, strs]

这样WinBAS类就可以动态加入了BAS_GetUserList函数。