草庐IT

Metaprogramming

全部标签

Java元编程

我正在使用Java开发我的第一个真正的项目。尽管我对动态语言有更多的经验,但我开始适应这种语言。我有一个行为类似于以下的类:classSingle{publicvoiddoActionA(){}publicvoiddoActionB(){}publicvoiddoActionC(){}}然后我有一个SingleList类充当这些类的集合(具体来说,它用于2DSprite库,“Action”是各种转换:旋转、剪切、规模等)。我希望能够执行以下操作:classSingleList{publicvoiddoActionA(){for(Singles:_innerList){s.doActio

java - Java Classloader 能否重写系统类(仅它们的副本)的字节码?

所以我有一个类加载器(MyClassLoader),它在内存中维护一组“特殊”类。这些特殊类被动态编译并存储在MyClassLoader内部的字节数组中。当MyClassLoader被请求一个类时,它首先检查它的specialClasses是否在委托(delegate)给系统类加载器之前,字典包含它。它看起来像这样:classMyClassLoaderextendsClassLoader{MapspecialClasses;publicMyClassLoader(Mapsb){this.specialClasses=sb;}@OverridepublicClassloadClass(S

java - 使用 ASM 重写 Java 本地方法

我正在尝试通过使用ASM4.0重写类的字节码来做到这一点用非nativestub替换所有native方法。到目前为止我有这个:classClassAdapterextendsClassVisitor{publicClassAdapter(ClassVisitorcv){super(Opcodes.ASM4,cv);}@OverridepublicMethodVisitorvisitMethod(intaccess,Stringbase,Stringdesc,Stringsignature,String[]exceptions){returncv.visitMethod(access&~

java - 显式使用 LambdaMetafactory

我正在尝试显式使用LambdaMetafactory.metafactory,我不明白为什么它只适用于Runnable功能接口(interface)。例如,此代码执行预期的操作(打印“helloworld”):publicclassMetafactoryTest{publicstaticvoidmain(String[]args)throwsThrowable{MethodHandles.Lookupcaller=MethodHandles.lookup();MethodTypemethodType=MethodType.methodType(void.class);MethodTyp

python - python属性的get和set顺序是什么?

Python为我们提供了很多实例/类属性的可能性,例如:classA(object):def__init__(self):self.foo="hello"a=A()有很多方法可以访问/更改self.foo的值:直接访问a.foo内部字典a.__dict__['foo']获取和设置a.__get__和a.__set__,当然有两个是预定义的方法。getattributea.__getattribute____getattr__和__setattr__也许更多。在阅读源代码时,我总是搞不清楚它们的最终访问顺序是什么?当我使用a.foo时,我如何知道哪个方法/属性将被实际调用?

python - 在 python 中,我们可以在(其他)用户代码执行之前跟踪模块级分配吗?

我正在开发一种工具,该工具将受益于从python中跟踪对给定对象的所有引用的能力。具体来说,我想制作一个可以替换给定类型的所有模块级属性的测试替身系统。例如,假设以下代码在模块c中:fromaimportb如果a是一个模块,b是对名为a.b的对象的引用,但它是一个独立引用。如果我的测试双系统稍后替换a.b,c.b仍将引用原始对象。我想让我的工具跟踪a.b到别名的所有分配,但模块级别名对我的目标大有帮助。打个比方,我想要覆盖Module.__setattribute__:def__setattribute__(self,name,value):ifisinstance(value,int

python - 给定一个方法,如何在 Python 3.3 及更高版本中返回它所属的类?

给定x=C.f之后:classC:deff(self):pass我在x上调用什么将返回C?我能做的最好的事情就是执行x.__qualname__的解析部分,这很丑陋:exec('d='+".".join(x.__qualname__.split('.')[:-1]))对于一个用例,假设我想要一个装饰器,它可以将super调用添加到它所应用的任何方法中。那个只给了函数对象的装饰器如何让类super(下面的???)?defensure_finished(iterator):try:next(iterator)exceptStopIteration:returnelse:raiseRunti

python - 如何在元类中键入提示动态设置的类属性?

当我动态设置一个类的属性时:fromtypingimportTypeVar,Generic,Optional,ClassVar,AnyclassIntField:type=intclassPersonBase(type):def__new__(cls):forattr,valueincls.__dict__.items():ifnotisinstance(value,IntField):continuesetattr(cls,attr,value.type())returnclsclassPerson(PersonBase):age=IntField()person=Person()p

python - 在 Python 描述符中创建动态文档字符串

我正在尝试动态生成一些类定义(用于包装C++扩展)。下面的描述符工作正常,除了当我尝试使用help()访问字段的文档字符串时,它为描述符而不是它自己的字段提供默认文档。但是,当我执行help(classname)时,它会检索传递给描述符的文档字符串:classFieldDescriptor(object):def__init__(self,name,doc='Nodocumentationavailable.'):self.name=nameself.__doc__=docdef__get__(self,obj,dtype=None):ifobjisNoneanddtypeisnotN

python - 创建每个实例的属性描述符?

通常Python描述符被定义为类属性。但就我而言,我希望每个对象实例都具有取决于输入的不同集合描述符。例如:classMyClass(object):def__init__(self,**kwargs):forattr,valinkwargs.items():self.__dict__[attr]=MyDescriptor(val)每个对象都有不同的属性集,这些属性是在实例化时决定的。由于这些是一次性对象,因此不方便先对它们进行子类化。tv=MyClass(type="tv",size="30")smartphone=MyClass(type="phone",os="android")