如果使用实例化对象,来为类动态的添加一个 字符串形式的 方法。

Posted chengege

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果使用实例化对象,来为类动态的添加一个 字符串形式的 方法。相关的知识,希望对你有一定的参考价值。

import types

class MyClass:
    @staticmethod
    def extends(self_name, method_name, method_str, ):
        ‘‘‘
        使用实例化对象 动态的为 类添加一个 字符串形式的 方法。
        :param self_name: 调用该方法的对象 的名字
        :param method_name:  要添加的方法的名字
        :param method_str: 这个方法的 具体代码
        ‘‘‘
        method_str = method_str + \n%s.%s=types.MethodType(%s, %s) % (self_name, method_name, method_name, self_name)
        exec(method_str)


a = MyClass()

method_str = ‘‘‘
def say(self, name):
    print(‘My name is‘, name)
‘‘‘
a.extends(a, say, method_str)

a.say(alex)  # My name is alex

其实就是这样的:

import types

class MyClass:
  @staticmethod
  def extends(self_name, method_name, method_str):
    pass

a = MyClass()

def say(self, name):
    print(My name is, name)


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

a.say(alex)  # My name is alex

 

具体有啥用呢?  基本用不到。 只是适合小部分场景。 比如从网页上抓到了一写代码。 然后我想执行。
不过网页上的 都是一些 js 代码。 想来js 应该也有相同的方法吧。
只是一个思路。 不必较真。

 

以上是关于如果使用实例化对象,来为类动态的添加一个 字符串形式的 方法。的主要内容,如果未能解决你的问题,请参考以下文章

python元类深入解析

JVM--10--创建对象的步骤对象实例化内存布局访问定位

使用locate动态实例化类

20属性和动态特性

第四周总结

面向对象-类的定义和实例化