问题标签 [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.

0 投票
3 回答
2982 浏览

python - Python 元类

我一直在像这样在 Python 中编写类:

这对我来说看起来很干净。它接受一个类 A,创建一个从它派生的具有额外方法的新类,调用 f,然后将新类重新分配给 A。

这与 Python 中的元类黑客攻击有何不同?与此相比,使用元类有什么优势?

0 投票
6 回答
10017 浏览

c++ - 如何在 C++ 中实现元类?

我一直在阅读一些关于什么是元类的文章,但我想知道它们是否可以在 C++ 中实现。

我知道 Qt 库正在使用 MetaObjects,但它使用 C++ 的扩展来实现它。我想知道是否可以直接在 C++ 中使用。

谢谢。

0 投票
4 回答
691 浏览

python - 可作为实例方法调用?

假设我们有一个元类CallableWrappingMeta,它遍历一个新类的主体,用一个类包装它的方法,InstanceMethodWrapper

我们的虚拟包装器只是在参数进入时打印它们。但是您会注意到一些明显的事情:该方法没有传递给实例对象接收器,因为即使InstanceMethodWrapper是可调用的,它也不会被视为函数在类创建期间转换为实例方法(在我们的元类完成之后)。

一个潜在的解决方案是使用装饰器而不是类来包装方法——该函数将成为实例方法。但在现实世界中,InstanceMethodWrapper情况要复杂得多:它提供 API 并发布方法调用事件。一个类更方便(并且性能更高,这并不重要)。

我也尝试了一些死胡同。子类化types.MethodTypetypes.UnboundMethodType没有去任何地方。稍加反省,似乎它们是从type. 所以我尝试将两者都用作元类,但也没有运气。可能是他们作为元类有特殊要求,但目前我们似乎处于无证领域。

有任何想法吗?

0 投票
3 回答
787 浏览

python - __metaclass__ 不应该强制在 Python 中使用元类吗?

我一直在尝试学习 Python 中的元类。我明白了主要想法,但我似乎无法激活该机制。据我了解,您可以在构建类 K 时将 M 指定为元类,方法是__metaclass__在全局或类级别设置为 M 。为了测试这一点,我编写了以下程序:

但是,当我运行它时,我得到以下输出:

我不应该在 1 和 2 之后看到“西班牙的雨”吗?这里发生了什么?

0 投票
2 回答
657 浏览

reflection - 如何在 Groovy 类中“隐藏”元类属性

我正在创建一些简单的 groovy 类,例如

用于依赖反射提取对象属性的 Java 方法中,例如年龄和名称。问题是 metaClass 也显示为属性。更新 Java 方法以忽略此属性不是一种选择。我尝试将 metaClass 属性设置为 null ,但这不起作用。

0 投票
1 回答
2343 浏览

grails - run-app 和 run-war 之间的 Grails 行为差异

我对 Groovy 和 Grails 比较陌生,我会在业余时间尝试它们。我有一个小型测试 Grails 应用程序,我可以使用 运行良好grails run-app,但grails run-war会导致错误。

在该grails-app/conf/BootStrip.init方法中,我在 and 上添加了一些属性获取DefaultGrailsControllerClassDefaultGrailsApplication

在我的grails-app/views/layouts/main.gsp,我使用这个:

这在 下运行良好run-app,但在 下运行run-war,我得到以下信息:

我已经在 Grails 1.1.1 和 1.2-M1 下尝试过这个并得到相同的结果。我已经验证了该BootStrap.init方法正在被调用(通过 a println),但是metaClassrun-war.

知道我错过了什么吗?

0 投票
2 回答
395 浏览

python - 将类属性反向映射到 Python 中的类

我在 Python 中有一些代码,其中有一堆类,每个类都有一个属性_internal_attribute。我希望能够生成这些属性到原始类的映射。基本上我希望能够做到这一点:

我在这里缺少的是如何生成magic_reverse_mapping字典。我有一种直觉,让元类生成 A 和 B 是解决此问题的正确方法;这看起来对吗?

0 投票
3 回答
5892 浏览

python - 不能使用继承的 Django 模型的 Meta 类来配置在继承的抽象模型中定义的字段

我想使用继承模型的 Meta 类中的属性来配置在继承树更高的抽象模型中定义的字段:

我希望 OwnedModel 表单的名称字段上的帮助文本说“此拥有对象的有意义的名称”。但事实并非如此:缺少“owned”一词,这表明在设置模型时使用了 NamedModel.Meta 中的 verbose_name,而不是 OwnedModel.Meta。

从继承的角度来看,这并不是我所期望的:是否有某种方法可以创建字段,其中 Meta.verbose_name 指的是非抽象模型类上的值,而不是字段所在的抽象类被定义了?

还是我傻?

(这可能看起来像一个微不足道的例子,它是:但这只是为了说明我正在尝试做的更重要和更复杂的事情)

提前谢谢了。

0 投票
3 回答
1588 浏览

groovy - Groovy:使用 metaClass 向实例和类添加方法不起作用?

请参阅下面的代码。在使用 metaClass 将方法添加到类之前创建的类的旧实例不应该理解该方法吗?'PROBLEMATIC LINE' 注释下方的断言语句在我认为不应该执行时执行,因为旧的 parentDir 实例不应该理解 blech() 消息。

0 投票
1 回答
617 浏览

groovy - 如何在 groovy 中为类添加新的闭包

来自Snipplr

好的,这是脚本代码,评论中是问题和抛出的异常