草庐IT

python - 在 Python 中,什么时候应该使用元类?

我经历过这个:WhatisametaclassinPython?但是谁能更具体地解释一下什么时候应该使用元类概念以及什么时候它非常方便?假设我有一个像下面这样的类:classBook(object):CATEGORIES=['programming','literature','physics']def_get_book_name(self,book):returnbook['title']def_get_category(self,book):forcatinself.CATEGORIES:ifbook['title'].find(cat)>-1:returncatreturn"Ot

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

我一直在努力学习Python中的元类。我明白了主要思想,但我似乎无法激活该机制。据我了解,您可以在构造类K时指定M作为元类,方法是在全局或类级别将__metaclass__设置为M。为了对此进行测试,我编写了以下程序:p=printclassM(type):def__init__(*args):type.__init__(*args)print("TheraininSpain")p(1)classClassMeta:__metaclass__=Mp(2)__metaclass__=MclassGlobalMeta:passp(3)M('NotMeta2',(),{})p(4)但是,当我

python - Python 中的元类是什么?

在Python中,元类是什么,我们用它们做什么? 最佳答案 元类是类的类。类定义类的实例(即对象)的行为方式,而元类定义类的行为方式。类是元类的实例。虽然在Python中您可以为元类使用任意可调用对象(如Jerub所示),但更好的方法是使其成为实际的类本身。type是Python中常见的元类。type本身就是一个类,它是它自己的类型。您将无法重新创建类似type的内容。纯粹在Python中,但Python有点作弊。要在Python中创建自己的元类,您真的只想继承type.元类最常用作类工厂。当您通过调用类创建对象时,Python会通

python - 如何在没有元类冲突的情况下将泛型类型与 PyQt 子类一起使用?

我已经尝试过使用sip包装器类型的abc.ABCMeta,当使用abc.ABC进行子类化时它工作得很好。classQABCMeta(wrappertype,ABCMeta):passclassWidgetBase(QWidget,metaclass=QABCMeta):...classInterfaceWidget(WidgetBase,ABC):...classMainWidget(InterfaceWidget):...但它不适用于typing.Generic。classQGenericMeta(wrappertype,GenericMeta):passclassWidgetBas

python - 使用元类实现工厂设计模式

我找到了很多关于元类的链接,其中大多数都提到它们对于实现工厂方法很有用。你能给我一个使用元类来实现设计模式的例子吗? 最佳答案 我很想听听人们对此的评论,但我认为这是您想要做的事情的一个例子classFactoryMetaclassObject(type):def__init__(cls,name,bases,attrs):"""__init__willhappenwhenthemetaclassisconstructed:theclassobjectitself(nottheinstanceoftheclass)"""passde

python - 如何创建元类?

这个问题在这里已经有了答案:WhataremetaclassesinPython?(24个答案)关闭6年前。我对什么是元类有一个大概的了解。它们是类对象所基于的类(因为类在Python中是对象)。但是有人可以解释(用代码)如何创建一个。

python - 双重继承导致元类冲突

我使用两个django包-django-mptt(用于实现修改后的预序树遍历的实用程序)和django-hvad(模型翻译)。我有一个模型类MenuItem,我希望它扩展TranslatableModel和MPTTModel,如下所示:classMenuItem(TranslatableModel,MPTTModel):但它会导致元类冲突:(TypeError:Errorwhencallingthemetaclassbasesmetaclassconflict:themetaclassofaderivedclassmustbea(non-strict)subclassofthemeta

python - 多重继承元类冲突

我需要一个类的双重继承。我尝试了几种语法,但我不理解元类的概念。fromPyQt5.QtGuiimportQStandardItemfromconfigparserimportConfigParserclassFinalClass(ConfigParser,QStandardItem):def__init__(self,param):ConfigParser.__init__(self)QStandardItem.__init__(self) 最佳答案 您的问题是您尝试继承的类具有不同的元类:>>>type(QStandardIte

python - 元类单例对象中的析构函数

我正在修改一个通过元类方法使用单例模式的遗留库。Singleton类,继承自type,定义了__call__函数。现在,我使用这个库的单例对象永远不会被删除。我在单例类中定义了__del__方法,但从未调用该函数。澄清:我已经实现了一个名为Singleton的(元)类,它被多个类使用,使用Singleton作为__metaclass__。例如,我有classA(object),它有__metaclass__=Singleton。A类有几个成员,我想在我的程序结束时销毁它们,并且A对象(唯一可以存在的对象)被销毁。我尝试在A类中定义__del__方法,但它不起作用。

python - 元类上的拦截运算符查找

我有一个类需要对每个运算符施展魔法,例如__add__、__sub__等等。我没有在类中创建每个函数,而是有一个元类,它定义了运算符模块中的每个运算符。importoperatorclassMetaFuncBuilder(type):def__init__(self,*args,**kw):super().__init__(*args,**kw)attr='__{0}{1}__'foropin(xforxindir(operator)ifnotx.startswith('__')):oper=getattr(operator,op)#...Ihavemymagicreplacement