问题标签 [metaclass]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Python 元类
我一直在像这样在 Python 中编写类:
这对我来说看起来很干净。它接受一个类 A,创建一个从它派生的具有额外方法的新类,调用 f,然后将新类重新分配给 A。
这与 Python 中的元类黑客攻击有何不同?与此相比,使用元类有什么优势?
c++ - 如何在 C++ 中实现元类?
我一直在阅读一些关于什么是元类的文章,但我想知道它们是否可以在 C++ 中实现。
我知道 Qt 库正在使用 MetaObjects,但它使用 C++ 的扩展来实现它。我想知道是否可以直接在 C++ 中使用。
谢谢。
python - 可作为实例方法调用?
假设我们有一个元类CallableWrappingMeta
,它遍历一个新类的主体,用一个类包装它的方法,InstanceMethodWrapper
:
我们的虚拟包装器只是在参数进入时打印它们。但是您会注意到一些明显的事情:该方法没有传递给实例对象接收器,因为即使InstanceMethodWrapper
是可调用的,它也不会被视为函数在类创建期间转换为实例方法(在我们的元类完成之后)。
一个潜在的解决方案是使用装饰器而不是类来包装方法——该函数将成为实例方法。但在现实世界中,InstanceMethodWrapper
情况要复杂得多:它提供 API 并发布方法调用事件。一个类更方便(并且性能更高,这并不重要)。
我也尝试了一些死胡同。子类化types.MethodType
并types.UnboundMethodType
没有去任何地方。稍加反省,似乎它们是从type
. 所以我尝试将两者都用作元类,但也没有运气。可能是他们作为元类有特殊要求,但目前我们似乎处于无证领域。
有任何想法吗?
python - __metaclass__ 不应该强制在 Python 中使用元类吗?
我一直在尝试学习 Python 中的元类。我明白了主要想法,但我似乎无法激活该机制。据我了解,您可以在构建类 K 时将 M 指定为元类,方法是__metaclass__
在全局或类级别设置为 M 。为了测试这一点,我编写了以下程序:
但是,当我运行它时,我得到以下输出:
我不应该在 1 和 2 之后看到“西班牙的雨”吗?这里发生了什么?
reflection - 如何在 Groovy 类中“隐藏”元类属性
我正在创建一些简单的 groovy 类,例如
用于依赖反射提取对象属性的 Java 方法中,例如年龄和名称。问题是 metaClass 也显示为属性。更新 Java 方法以忽略此属性不是一种选择。我尝试将 metaClass 属性设置为 null ,但这不起作用。
grails - run-app 和 run-war 之间的 Grails 行为差异
我对 Groovy 和 Grails 比较陌生,我会在业余时间尝试它们。我有一个小型测试 Grails 应用程序,我可以使用 运行良好grails run-app
,但grails run-war
会导致错误。
在该grails-app/conf/BootStrip.init
方法中,我在 and 上添加了一些属性获取DefaultGrailsControllerClass
器DefaultGrailsApplication
:
在我的grails-app/views/layouts/main.gsp
,我使用这个:
这在 下运行良好run-app
,但在 下运行run-war
,我得到以下信息:
我已经在 Grails 1.1.1 和 1.2-M1 下尝试过这个并得到相同的结果。我已经验证了该BootStrap.init
方法正在被调用(通过 a println
),但是metaClass
对run-war
.
知道我错过了什么吗?
python - 将类属性反向映射到 Python 中的类
我在 Python 中有一些代码,其中有一堆类,每个类都有一个属性_internal_attribute
。我希望能够生成这些属性到原始类的映射。基本上我希望能够做到这一点:
我在这里缺少的是如何生成magic_reverse_mapping
字典。我有一种直觉,让元类生成 A 和 B 是解决此问题的正确方法;这看起来对吗?
python - 不能使用继承的 Django 模型的 Meta 类来配置在继承的抽象模型中定义的字段
我想使用继承模型的 Meta 类中的属性来配置在继承树更高的抽象模型中定义的字段:
我希望 OwnedModel 表单的名称字段上的帮助文本说“此拥有对象的有意义的名称”。但事实并非如此:缺少“owned”一词,这表明在设置模型时使用了 NamedModel.Meta 中的 verbose_name,而不是 OwnedModel.Meta。
从继承的角度来看,这并不是我所期望的:是否有某种方法可以创建字段,其中 Meta.verbose_name 指的是非抽象模型类上的值,而不是字段所在的抽象类被定义了?
还是我傻?
(这可能看起来像一个微不足道的例子,它是:但这只是为了说明我正在尝试做的更重要和更复杂的事情)
提前谢谢了。
groovy - Groovy:使用 metaClass 向实例和类添加方法不起作用?
请参阅下面的代码。在使用 metaClass 将方法添加到类之前创建的类的旧实例不应该理解该方法吗?'PROBLEMATIC LINE' 注释下方的断言语句在我认为不应该执行时执行,因为旧的 parentDir 实例不应该理解 blech() 消息。
groovy - 如何在 groovy 中为类添加新的闭包
来自Snipplr
好的,这是脚本代码,评论中是问题和抛出的异常