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

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

原文地址:https://www.cnblogs.com/chengege/p/10958288.html

时间: 2024-10-12 13:40:45

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

为一个类动态的添加属性

/* 1不想集成一个类添加属性,想动态的添加一个属性 */ ||解决步骤 1.新建一个分类,导入 #import <objc/runtime.h> 2.添加属性(添加的属性,只是做了声明,并没有帮我们生成set,get方法) 3.手动添加set,get方法 {1.在set方法中实现 /* *@object 为那个对象添加属性 *@key  添加一个对应的key  c语言类型的 *@value  对应的值 *@objc_AssociationPolicy  策略 */ objc_setAssoc

怎样在一个fragment or 随意类中操作还有一个fragment中的方法

1 怎样在acitivty中运行fragment中的方法: 首先获得这个Fragment的对象 xxxFragment fragmentObject = (xxxFragment) getFragmentManager.findFragmentByTag("xx"); 2 怎样在Fragment中运行activity中的方法: 第一种:让acitivity继承接口 另外一种:在fragment中使用getActivity()可是要加上acitivity的名字,即: ((MainActi

OC动态创建的问题变量数组.有数组,在阵列13要素,第一个数据包阵列,每3元素为一组,分成若干组,这些数据包的统一管理。最后,一个数组.(要动态地创建一个数组).两种方法

<span style="font-size:24px;">//////第一种方法 //        NSMutableArray *arr = [NSMutableArray array]; //        for (int i = 0; i < 13; i ++) { //            [arr addObject:[NSString stringWithFormat:@"lanou%d",i + 1]]; //        

2016/3/21 面向对象: ①定义类 ②实例化对象 ③$this关键字 ④构造函数 ⑤析构函数 ⑥封装 ⑦继承

一:定义类   二:实例化对象 1 //定义类 2 class Ren 3 { 4 var $name; 5 var $sex; 6 var $age; 7 8 function Say() 9 { 10 echo "{$this->name}在说话"; 11 } 12 } 13 //实例化对象 14 $Ren = new Ren(); 15 //调用对象的成员: 16 $Ren->name = "张三"; 17 $Ren->Say(); 显示结果

面向对象-类与实例化对象

类: 一系列对象相似特征与技能的结合体 注:站在不同角度,分类不一样 在现实世界中:一定先有对象,再有类 在程序中:一定需先有类,再有对象 定义类并实例化对象: #定义类 class LuffyStudent: school='luffycity' def learn(self): print('is learning') def eat(self): print('is eating') def sleep(self): print('is sleeping') #实例化对象 stu1=Luf

7. 反射技术:其实就是动态加载一个指定的类

反射技术:其实就是动态加载一个指定的类,并获取该类中的所有的内容.而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操作这些成员.简单说:反射技术可以对一个类进行解剖. 反射的好处:大大的增强了程序的扩展性. 反射的基本步骤: 1.获得Class对象,就是获取到指定的名称的字节码文件对象. 2.实例化对象,获得类的属性.方法或构造函数. 3.访问属性.调用方法.调用构造函数创建对象. 获取这个Class对象,有三种方式: 1:通过每个对象都具备的方法getClass来获取.

java反射-反射实例化对象-反射获得构造方法-反射获得普通方法-获得属性

链接:https://www.zhihu.com/question/24304289/answer/38218810来源:知乎著作权归作者所有,转载请联系作者获得授权. Class<?> cls = Class.forName("cn.mldn.demo.Person"); // 取得Class对象 第一步:获得对象,构造方法,普通方法,属性 Object obj = cls.newInstance() Constructor<?> cons = cls.get

1.元类介绍/2.自定义元类控制类的行为/3.控制类的实例化行为/4.控制类的实例化行为的应用

1.元类介绍 1.储备知识exec()参数1;字符串形式得命令参数2.全局作用域(字典形式),如果不指定默认就使用globals()参数3.局部作用域(字典形式),如果不指定默认就使用locals() 2.python 一切皆对象 ,对象可以怎么用? 2.1. 都可以被引用 x=obj 2.2. 都可以当作函数得参数传入 2.3. 都可以当作函数得返回值 2.4. 都可以当作容器类得元素 li=[func,time] # 类也是对象,Foo=type() 类是属于type() 类 3.什么叫元类

从头认识多线程-2.2 synchronized持有对象锁与类锁的相同点

这一章节我们来讨论一下synchronized持有对象锁与类锁的相同点. 1.当所有方法都不使用同步的时候 代码清单 package com.ray.deepintothread.ch02.topic_2; public class SynchInstance1 { public static void main(String[] args) throws InterruptedException { MyTestObjectOne myTestObjectOne = new MyTestObj