问题标签 [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,Zope 组件架构,注册适配器
在一个独立的 python 应用程序中,我使用zope.interface、zope.component包来注册和访问应用程序的适配器。我想我可以使用元类概念从元类的init方法中注册适配器。这将“自动化”适配器的注册过程。您是否看到这种方法存在问题,例如使用 zope 包添加到类的属性?提前感谢您的意见。
python - 有没有办法在类定义之后设置元类?
为了设置一个类的元类,我们使用__metaclass__
属性。元类在定义类时使用,因此在类定义之后显式设置它没有效果。
这就是我尝试显式设置元类时发生的情况;
我能想到的最好的主意是重新定义整个类并__metaclass__
以某种方式动态添加属性。或者您知道在类定义之后设置元类的更好方法吗?
python - unittest 和 metaclass:自动 test_* 方法生成
当我为框架创建测试时,我开始注意到以下模式:
所以我想用元类以编程test_feat_*
方式为这些类型的测试类创建方法。换句话说,对于每个带有签名的私有方法,我想要创建两个带有签名和_test_{featname}(self, arg)
的顶级可发现方法。test_{featname}_true(self)
test_{featname}_false(self)
我想出了类似的东西:
我期望一些输出,例如:
但我得到的是:
看起来我缺少一些关闭规则。我该如何解决这个问题?有更好的方法吗?
谢谢,
编辑:固定。请参阅:片段。
python - nose, unittest.TestCase and metaclass: auto-generated test_* methods not discovered
This is a follow-up question for unittest and metaclass: automatic test_* method generation:
For this (fixed) unittest.TestCase layout:
This works using stdlib
's framework. Expected and actual output:
However, since I am actually using nose, this trick seems to not agree with it. The output I got is:
In short, the test_*
methods generated by the metaclass do not register with nose. Can anyone shed a light on this?
Thanks,
python - 如何在定义类时自动注册一个类
我想在定义类时注册一个类的实例。理想情况下,下面的代码可以解决问题。
不幸的是,这段代码会产生错误NameError: global name 'MyClass' is not defined
。
发生的事情是在#problem here
我试图实例化 aMyClass
但装饰器还没有返回所以它不存在的那一行。
是否使用元类或其他方法来解决这个问题?
python - Python:元类 + 包装方法 + 继承 = 问题
我在 Python 中有一个问题,我找不到任何干净的解决方案......
在调用某些方法时,我想在方法执行之前和之后执行一些代码。为了(以及许多其他事情)自动设置和清理context
变量。
为了实现这一点,我声明了以下元类:
这就像一个魅力:
但是,一旦我想子类Parent
化,就会出现问题,当我使用以下方法调用父方法时super
:
我曾考虑在将上下文设置为新值之前保存上下文,但这只能部分解决问题......
确实,(等等,这很难解释),父方法被调用,包装器被执行,但它们接收*args
并**kwargs
寻址到Parent.test
, whileself
是一个Child
实例,所以self
如果我想用*args
and **kwargs
(例如用于自动验证目的),例如:
所以基本上,为了解决这个问题,我看到了两个解决方案:
防止在调用方法时执行包装器
super(Child, self)
有一个
self
总是“正确”类型的
这两种解决方案对我来说似乎都是不可能的......有人知道如何解决这个问题吗?一条建议 ?
python - 欺骗 Python 运算符优先级
我知道当我比较两个对象lhs == rhs
并且都定义__eq__
时,lhs.__eq__
除非它返回NotImplemented
或者rhs
是lhs
.
但是,我想实现一个类,它的实例在与任意对象进行比较时,将有机会说出他们想说的话,而arbitrary_object.__eq__
不管比较语句的实现细节和位置。这听起来有点尴尬,但我正在做一个面向测试的小项目,看看testmania.expect
你就会明白我需要这个做什么。
__instancecheck__
我最初的想法是使用元类魔法和,使我的类成为任何其他类的子类__subclasscheck__
。但在简单比较的情况下,它们根本不会被调用。
有人有什么新鲜想法吗?
delphi - 测试类引用(元类)变量中的类是否为 TMyClass
我想知道从类引用创建的对象是特定类的实例还是它的任何后代。
换句话说,我想要一个布尔表达式,例如
但是其中 var 被替换为涉及类引用变量的表达式。这听起来很容易,但让我完全难住了。
我可以创建一个实例 var := classRefVar.Create,对其进行测试,然后销毁它,但这是一个巨大的开销。
奇怪的是,编译器不会让我有
但对看似相同但无用的句法感到满意
显然,表达式
不好,因为 classRefVar 可能引用 TMyClass 的后代。
当我看到答案时,我期待着踢自己......
python - 提供不同线性代数后端的架构
我正在用 Python 制作一个新系统的原型;功能主要是数字。
一个重要的要求是能够使用不同的线性代数后端:从单个用户实现到通用库,例如 Numpy。线性代数实现(即后端)必须独立于接口。
我最初的架构尝试如下:
(1) 定义系统接口
(2) 实现允许独立于后端使用该接口的代码
这个简单示例的工作方式如下:Vector
该类保留对后端创建的向量实例的引用(numpy.ndarray
在示例中);所有算术调用都由接口实现,但它们的评估推迟到后端。
在实践中,接口重载了所有适当的运算符并推迟到后端(示例仅显示__mul__
and __rmul__
,但您可以遵循每个操作都会执行相同的操作)。
我愿意牺牲一些性能来换取可定制性。即使我的示例有效,但感觉不对——我会用这么多构造函数调用来破坏后端!这需要一个不同的metaclass
实现,允许更好的调用延迟。
那么,你会如何建议我实现这个功能呢?我需要强调保持所有系统Vector
实例同质且独立于线性代数后端的重要性。
python - 在类似 django 的表单实现中使用元类有什么好处?
首先是一点背景......我正在查看表单的 Django 源代码,以了解 Django 中表单的实现(并在此过程中学习一些 Python)。Django 使用 DeclaredMetaFields MetaClass实现表单。
这是一个非常粗略的类 Django 表单实现的类图(链接到 gist 中的示例代码)。
这是一个实例图。
这是同一个类的一个非常粗略的实现,而不使用元类(链接到 gist 中的示例代码)。
我了解元类概念等,并了解 Django 代码是如何工作的。现在回答问题。
- 除了语法优雅等明显的好处之外,元类实现还有其他好处吗?
- 是否可以在不借助 BoundField 之类的中间对象的情况下实现类似元类的实现?