问题标签 [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 投票
1 回答
3653 浏览

python - 类方法对象如何工作?

我很难理解 classmethod 对象在 Python 中是如何工作的,尤其是在元类和__new__. 在我的特殊情况下,当我遍历members被赋予的__new__.

对于普通方法,名称只是存储在__name__属性中,但对于类方法,显然没有这样的属性。我什至看不到如何调用类方法,因为也没有__call__属性。

有人可以向我解释一个类方法是如何工作的或指向我一些文档吗?谷歌搜索让我无处可去。谢谢!

0 投票
1 回答
2688 浏览

ruby - ruby 顶层定义的方法在哪里?

在顶层,方法定义应该导致私有方法 on Object,并且测试似乎证明了这一点:

但是,以下也适用于顶层(self.meta是 的特征类main):

似乎该hello方法同时定义在 main 和 on 的特征类上Object。这是怎么回事?请注意,要从方法列表false中排除超类方法的参数。private_instance_methods

0 投票
1 回答
1752 浏览

python - 子类中未调用元类

这是一个python会话。

在我定义类 XI 之后,期望 Z._new__ 被调用,并打印没有发生的两行(因为元类是继承的?)

0 投票
2 回答
8331 浏览

python - Python 元类与类装饰器

Python 元类和类装饰器之间的主要区别是什么?有什么我可以用一个做但不能用另一个做的吗?

0 投票
1 回答
289 浏览

python - 从元类继承方法

这个问题中给出的示例枚举代码中,转载如下,为什么TOKEN包含元类的实现__contains____repr__来自元类的实现EnumerationType

我希望以下代码会引发__contains__未实现的异常,但是,我收到了True False.

0 投票
3 回答
895 浏览

python - python为整个程序修改__metaclass__

编辑:请注意,这在生产代码中是一个非常糟糕的主意。这对我来说只是一件有趣的事情。不要在家里这样做!

是否可以在 Python 中修改整个程序(解释器)的 __metaclass__ 变量?

这个简单的例子有效:

但我希望能够改变 __metaclass__ 即使在子模块中也能工作。例如(文件 m1.py):

文件 main.py:

我知道全局 __metaclass__ 不再在 Python 3.X 中工作,但这不是我关心的问题(如果是概念证明,我的代码)。那么有什么方法可以在 Python-2.x 中实现这一点吗?

0 投票
1 回答
5182 浏览

python - Python 的内置 __build_class__ 有什么作用?

在 Python 3.1 中,模块中有一个我不知道的新内置函数builtins

这个函数有什么作用?如果它是内部的,为什么它必须是内置的?功能有什么区别type(name, bases, dict)

0 投票
5 回答
14385 浏览

python - 定义元类时是否有任何理由选择 __new__ 而不是 __init__ ?

我总是设置这样的元类:

但我刚刚遇到了一个定义如下的元类:

有什么理由更喜欢其中一个吗?

更新:请记住,我问的是在元类中使用__new____init__。我已经了解了他们在另一个班级中的区别。但是在元类中,我不能__new__用来实现缓存,因为__new__只在元类中创建类时调用。

0 投票
2 回答
1298 浏览

objective-c - class_getClassVariable() 有什么作用?

如果实例变量属于类的实例,那么类变量将属于元类的实例,我应该认为。但我对 Objective-C 元类的经验告诉我,这不太可能。

我想知道class_getClassVariable与 相比有什么作用class_getInstanceVariable,以及为什么运行时没有 a class_setClassVariable

0 投票
3 回答
498 浏览

perl - 如何使用 Moose 从属性的元对象创建值的实例?

我正在开发一个序列化工具,使用 Moose 来读取和写入符合非标准格式的文件。现在,我根据类中对象的默认值确定如何加载下一项,但这有其自身的缺点。相反,我希望能够使用属性元类中的信息来生成正确类型的新值。我怀疑有一种方法可以确定“isa”限制是什么并从中派生一个生成器,但我在 Moose::Meta::Attribute 或 Class::MOP::Attribute 中没有看到可以帮助我的特定方法。

这是一个更进一步的例子。假设我有以下课程:

(进一步解释:My::Role::LoadMy::Role::Save为此文件类型实现序列化角色。它们遍历它们所附加到的类的属性,并查看属性类以获取序列化顺序。)

My::Role::Load角色中,我可以遍历该类的元对象,查看所有可用的属性,并仅选择那些具有我的 Order 特征的属性:

现在,我需要知道isa元属性所代表的属性。现在,我通过获取它的一个实例来测试它,并用类似这样的东西对其进行测试:

但是,正如您在 中看到的# <-- ERROR PRONE PROBLEM HERE!,整个过程依赖于属性中的一个值!如果值为 undef,我不知道要加载什么。我想$attribute->get_value($self)用一种方法来获取有关需要加载的值类型的信息。我的问题是,我在上面链接到的文档Class::MOP::Attribute似乎Moose::Meta::Attribute没有任何方法可以获取属性应该获取的对象类型。

属性的类型信息基本上就是我想要得到的。

(给未来的读者注意:这里的答案让我开始了,但它本身并不是最终的解决方案。你必须深入研究Moose::Meta::TypeConstraint课程才能真正做到我在这里寻找的东西。)