问题标签 [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 - 类方法对象如何工作?
我很难理解 classmethod 对象在 Python 中是如何工作的,尤其是在元类和__new__
. 在我的特殊情况下,当我遍历members
被赋予的__new__
.
对于普通方法,名称只是存储在__name__
属性中,但对于类方法,显然没有这样的属性。我什至看不到如何调用类方法,因为也没有__call__
属性。
有人可以向我解释一个类方法是如何工作的或指向我一些文档吗?谷歌搜索让我无处可去。谢谢!
ruby - ruby 顶层定义的方法在哪里?
在顶层,方法定义应该导致私有方法 on Object
,并且测试似乎证明了这一点:
但是,以下也适用于顶层(self.meta
是 的特征类main
):
似乎该hello
方法同时定义在 main 和 on 的特征类上Object
。这是怎么回事?请注意,要从方法列表false
中排除超类方法的参数。private_instance_methods
python - 子类中未调用元类
这是一个python会话。
在我定义类 XI 之后,期望 Z._new__ 被调用,并打印没有发生的两行(因为元类是继承的?)
python - Python 元类与类装饰器
Python 元类和类装饰器之间的主要区别是什么?有什么我可以用一个做但不能用另一个做的吗?
python - 从元类继承方法
在这个问题中给出的示例枚举代码中,转载如下,为什么TOKEN
包含元类的实现__contains__
和__repr__
来自元类的实现EnumerationType
?
我希望以下代码会引发__contains__
未实现的异常,但是,我收到了True False
.
python - python为整个程序修改__metaclass__
编辑:请注意,这在生产代码中是一个非常糟糕的主意。这对我来说只是一件有趣的事情。不要在家里这样做!
是否可以在 Python 中修改整个程序(解释器)的 __metaclass__ 变量?
这个简单的例子有效:
但我希望能够改变 __metaclass__ 即使在子模块中也能工作。例如(文件 m1.py):
文件 main.py:
我知道全局 __metaclass__ 不再在 Python 3.X 中工作,但这不是我关心的问题(如果是概念证明,我的代码)。那么有什么方法可以在 Python-2.x 中实现这一点吗?
python - Python 的内置 __build_class__ 有什么作用?
在 Python 3.1 中,模块中有一个我不知道的新内置函数builtins
:
这个函数有什么作用?如果它是内部的,为什么它必须是内置的?功能有什么区别type(name, bases, dict)
?
python - 定义元类时是否有任何理由选择 __new__ 而不是 __init__ ?
我总是设置这样的元类:
但我刚刚遇到了一个定义如下的元类:
有什么理由更喜欢其中一个吗?
更新:请记住,我问的是在元类中使用__new__
和__init__
。我已经了解了他们在另一个班级中的区别。但是在元类中,我不能__new__
用来实现缓存,因为__new__
只在元类中创建类时调用。
objective-c - class_getClassVariable() 有什么作用?
如果实例变量属于类的实例,那么类变量将属于元类的实例,我应该认为。但我对 Objective-C 元类的经验告诉我,这不太可能。
我想知道class_getClassVariable
与 相比有什么作用class_getInstanceVariable
,以及为什么运行时没有 a class_setClassVariable
。
perl - 如何使用 Moose 从属性的元对象创建值的实例?
我正在开发一个序列化工具,使用 Moose 来读取和写入符合非标准格式的文件。现在,我根据类中对象的默认值确定如何加载下一项,但这有其自身的缺点。相反,我希望能够使用属性元类中的信息来生成正确类型的新值。我怀疑有一种方法可以确定“isa”限制是什么并从中派生一个生成器,但我在 Moose::Meta::Attribute 或 Class::MOP::Attribute 中没有看到可以帮助我的特定方法。
这是一个更进一步的例子。假设我有以下课程:
(进一步解释:My::Role::Load
并My::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
课程才能真正做到我在这里寻找的东西。)