问题标签 [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 - 如何使用元类添加方法
如何使用元类向类添加实例方法(是的,我确实需要使用元类)?以下类型的作品,但 func_name 仍将是“foo”:
我的问题是一些库代码实际上使用了 func_name 并且后来找不到 Foo 实例的 'bar' 方法。我可以做:
还有 types.MethodType,但我需要一个尚不存在的实例来使用它。我在这里错过了什么吗?
python - 使用一种方法的文档字符串自动覆盖另一种方法的文档字符串
问题:我有一个类,其中包含一个execute
调用另一个方法的模板方法_execute
。子类应该被覆盖_execute
以实现某些特定功能。此功能应记录在_execute
. 高级用户可以创建自己的子类来扩展库。但是,处理此类子类的另一个用户应该只使用execute
,因此如果他使用 ,他将看不到正确的文档字符串help(execute)
。
因此,最好修改基类,使子类中的文档字符串execute
自动替换为_execute
. 任何想法如何做到这一点?
我正在考虑使用元类来做到这一点,以使其对用户完全透明。
python - Python 中的元类是什么?
在 Python 中,什么是元类,我们用它们做什么?
python - 如何在 GAE 中覆盖 HTTP 请求动词
在 Google App Engine Webapp 框架应用程序的上下文中:
我想在提供参数_method的情况下更改请求的请求动词,例如,如果POST请求带有参数_method=PUT,我需要更改请求以调用处理程序的put方法。这是为了应对prototype.js 处理PUT 和DELETE 等动词的方式(IE 的解决方法)。这是我的第一次尝试:
问题是,由于某种原因,每当重定向完成时,self.request.params 在调用处理方法(放置或删除)时被清空,即使它们在调用初始化时被填充。任何人都知道这是为什么?作为一种解决方法,我认为我可以在 initialize() 时间克隆参数,但是 .copy() 不起作用,我也没有找到一种方法来做到这一点。
更新:我收到了来自 Arachnid 的非常有用的回复。我最终得到的解决方案使用了元类。它在下面找到。
python - 元类有哪些(具体)用例?
我有一个朋友喜欢使用元类,并定期提供它们作为解决方案。
我认为您几乎不需要使用元类。为什么?因为我认为如果你对一个类做这样的事情,你可能应该对一个对象做这样的事情。一个小的重新设计/重构是有序的。
能够使用元类导致很多地方的很多人将类用作某种二流对象,这对我来说似乎是灾难性的。编程会被元编程取代吗?不幸的是,类装饰器的添加使它更容易被接受。
所以,我很想知道你在 Python 中元类的有效(具体)用例。或者了解为什么变异类有时比变异对象更好。
我将开始:
有时在使用第三方库时,能够以某种方式改变类是很有用的。
(这是我能想到的唯一案例,并不具体)
python - “MetaClass”、“__new__”、“cls”和“super”——具体的机制是什么?
我读过这样的帖子:
但不知何故,我感到困惑。许多困惑,例如:
我何时以及为什么必须执行以下操作?
或者
或者
super 究竟是如何工作的?
什么是链接 1 中的类注册和取消注册,它是如何工作的?(我认为这与singleton有关。我可能是错的,来自 C 背景。我的编码风格仍然是函数式和 OO 的混合体)。
类实例化(子类、元类、超类、类型)和方法调用(
) 带有注释良好的工作代码(虽然第一个链接非常接近,但它没有谈论 cls 关键字和 super(..) 和注册表)。最好是具有多重继承的示例。
PS:我将最后一部分作为代码制作,因为堆栈溢出格式正在将文本转换metaclass->__new__
为元类->新
python - 有人在 Python/其他语言中使用元元类/元元类吗?
我最近在 python 中发现了元类。
基本上,python中的元类是一个创建类的类。您想要这样做的原因有很多——例如任何类型的类初始化。在工厂上注册类、复杂的属性验证、改变继承的工作方式等等。所有这些不仅变得可能而且变得简单。
但在 python 中,元类也是普通类。所以,我开始想知道抽象是否可以有用地更高,在我看来它可以而且:
- 元类对应或实现模式中的角色(如在 GOF 模式语言中)。
- 元元类就是模式本身(如果我们允许它创建代表抽象角色的类元组,而不仅仅是一个类)
- meta-meta-metaclass 是一个模式工厂,它对应于 GOF 模式分组,例如 Creational、Structural、Behavioural。一个工厂,您可以在其中描述某种类型的问题的案例,它会为您提供一组解决它的类。
- 一个 meta-meta-meta-metaclass (据我所知),是一个模式工厂 factory,一个你可以描述问题类型的工厂,它会给你一个模式工厂来询问。
我在网上找到了一些关于这个的东西,但大多不是很有用。一个问题是不同的语言对元类的定义略有不同。
有没有其他人在 python/其他地方使用过这样的元类,或者在野外看到过这个,或者考虑过它?其他语言的类似物是什么?例如,在 C++ 中,模板递归能走多远?
我非常想进一步研究它。
interface - Groovy:为接口委托元类?
使用 Groovy 的包名称约定,我可以像这样拦截对 Java 方法的 Groovy 方法调用:
如果我真的创建了一个 Foo 类的对象,这很好用:
但是,如果 Foo 是一个接口,并且我想拦截对它的任何实现的方法调用怎么办?
有没有办法实现这一点,而无需为接口的每个已知实现使用 DelegatingMetaClass?
groovy - 如何从 Groovy 中的 MetaClass 方法引用 GroovyObject 实例?
这是我想要做的一个人为的例子,但最低限度地表达了所需的行为。我想引用正在调用属性访问的对象的实例。我首先尝试了“this”,但它指的是封闭类,而不是 MetaClass 或 String 实例。
c# - UML 2 Profiles 包:如何扩展操作?
我在 uml 配置文件实现方面遇到了很大的麻烦。问题是我不知道如何使用 Profile 从 Infrastructure::Core::Constructs 扩展 uml Operation 类?
根据 uml 元模型,来自 Profiles 包的扩展关联仅允许元类属于 Core::Constructs::Class 类型。
操作是元类吗?如果是这样,我怎么能把它作为 Core::Consructs::Class 呢?据我所见,没有一个 uml 元模型 Operation 确实专门或实现了 Core::Constructs::Class。
请帮我。
我正在尝试使用 C# 中的第三方 uml 2.* 元模型实现在 C# 中实现我的 uml 配置文件。