zoukankan      html  css  js  c++  java
  • 如果使用实例化对象,来为类动态的添加一个 字符串形式的 方法。

    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 + '
    %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 应该也有相同的方法吧。
    只是一个思路。 不必较真。

  • 相关阅读:
    LinQ&EF任我行(一)LinQ to SQL (转)
    WPF数据模板和控件模板
    Sql优化
    SQL锁表语句
    js动态创建dom
    js实现等待n秒后按钮可用
    js关于事件冒泡
    工作流学习(个人总结)
    sql常用函数
    将Datatable序列化为Json对象返回到客户端
  • 原文地址:https://www.cnblogs.com/chengege/p/10958288.html
Copyright © 2011-2022 走看看