我正在研究RPG,我正在研究升级系统。基本上当玩家达到一个新的水平时,我希望能够为玩家实例分配新的方法。
在下面的简单示例中,类C
包含一个方法a
,我想将其添加到类aa
的实例A
。
from types import MethodType
import inspect
class C(object):
@staticmethod
def a(x):
print 'print {}'.format(x)
class A(object):
pass
def change_method(instance,method,cls_dest):
instance.method = MethodType(method, instance, cls_dest)
#creating instance of A
aa = A()
#extracting method a
method_to_add = inspect.getmembers(C(), predicate=inspect.isfunction)[0][1]
#adding method a to class A
change_method(aa,method_to_add,type(aa))
我尝试使用inspect
提取方法然后将a
添加到aa
,但我收到以下错误:
aa.a(3)
Traceback (most recent call last):
File "<ipython-input-35-ea48aa2d0995>", line 1, in <module>
aa.a(3)
AttributeError: 'A' object has no attribute 'a'
我的想法是创建一个类(这里是C
),它将包含我想在我的实例中覆盖的所有方法。