将staticmethod分配给现有实例

时间:2016-06-28 15:43:08

标签: python python-2.7 class methods static-methods

我正在研究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),它将包含我想在我的实例中覆盖的所有方法。

0 个答案:

没有答案