我一直在尝试理解python元类,因此一直在浏览一些示例代码。据我了解,Python元类可以是任何可调用的。所以,我可以让我的元类像defmetacls(clsName,bases,atts):....returntype(clsName,bases,atts)但是,我看到很多人用以下方式编写他们的元类:classMetacls(type):def__new__(meta,clsName,bases,atts):....returntype.__new__(meta,clsName,bases,atts)据我所知,它们都会做同样的事情。有什么理由改用基类吗?习惯吗?
不能以任何其他方式使用的元类可以做什么?AlexMartelli告诉这里有些任务没有元类就无法完成Pythonmetaclassesvsclassdecorators我想知道哪些是? 最佳答案 如果你想让类对象(而不是类对象的实例)配备“特殊的自定义行为”,元类是必不可少的,因为对象的行为取决于上的特殊方法对象的类型,而类对象的类型正是元类的同义词。例如,如果您想要一个类对象X,使得“printX”发出“Timeisnow8:46am”(上午8:46,或者更一般地说,当前时间),这必须意味着type(x)(AKAX的元类)有一个特殊
我需要根据某些条件创建一个使用不同基类的类。在某些类(class)中,我臭名昭著:TypeError:metaclassconflict:themetaclassofaderivedclassmustbea(non-strict)subclassofthemetaclassesofallitsbases一个例子是sqlite3,这是一个你甚至可以在解释器中使用的简短例子:>>>importsqlite3>>>x=type('x',(sqlite3,),{})Traceback(mostrecentcalllast):File"",line1,inTypeError:metaclassc
我正在编写一个mixin,它可以让我的模型很容易地转换成一个深层的值dict(有点像.values(),但是遍历关系)。对这些进行定义的最干净的地方似乎是在模型本身中,ala:classPerson(models.Model,DeepValues):name=models.CharField(blank=True,max_length=100)tribe=models.ForeignKey('Tribes')classMeta:schema={'name':str,'tribe':{'name':str}}Person.objects.all().deep_values()=>{'na
看起来我偶然发现了一个元类hell,即使我不想与它有任何关系。我正在使用PySide在Qt4中编写一个应用程序。我想将事件驱动部分与从QtDesigner文件生成的UI定义分开。因此,我创建了一个“Controller”类,但为了简化我的生活,我还是多继承了它们。一个例子:classBaseController(QObject):defsetupEvents(self,parent):self.window=parentclassMainController(BaseController):passclassMainWindow(QMainWindow,Ui_MainWindow,Ma
我想问一下with_metaclass()调用在类的定义中是什么意思。例如:classFoo(with_metaclass(Cls1,Cls2)):类从元类继承是一种特殊情况吗?新类也是元类吗? 最佳答案 with_metaclass()是sixlibrary提供的实用类工厂函数,可以更轻松地为Python2和3开发代码。它对临时元类使用了一些技巧(见下文),以与Python2和Python3交叉兼容的方式将元类附加到常规类。引用文档:Createanewclasswithbaseclassbaseandmetaclassmetac
我有一个friend喜欢使用元类,并经常提供它们作为解决方案。我认为您几乎不需要使用元类。为什么?因为我想如果你对一个类做这样的事情,你可能应该对一个对象做它。一个小的重新设计/重构是有序的。能够使用元类已经导致很多地方的很多人将类用作某种二流对象,这对我来说似乎是灾难性的。编程会被元编程取代吗?不幸的是,添加类装饰器使它更容易被接受。所以拜托,我非常想知道你在Python中的元类的有效(具体)用例。或者了解为什么有时改变类比改变对象更好。我将开始:Sometimeswhenusingathird-partylibraryitisusefultobeabletomutatethecla
在Python中,元类是什么,我们用它们做什么? 最佳答案 元类是类的类。类定义类的实例(即对象)的行为方式,而元类定义类的行为方式。类是元类的实例。虽然在Python中您可以为元类使用任意可调用对象(如Jerub所示),但更好的方法是使其成为实际的类本身。type是Python中常见的元类。type本身就是一个类,它是它自己的类型。您将无法重新创建类似type的内容。纯粹在Python中,但Python有点作弊。要在Python中创建自己的元类,您真的只想继承type.元类最常用作类工厂。当您通过调用类创建对象时,Python会通
我有一个像这样的ruby类:classC@@v=1class'p@@vend我的问题是:异常显示“Object(NameError)中未初始化的类变量@@v”,但为什么ruby查找Object(main)中的类变量?似乎ruby总是在它之外查找元类的类变量。 最佳答案 你已经定义了类变量@@v上课C.我们不应该对此感到惊讶:class引发异常,因为这里我们正在处理singletonclass的C,我们没有为其定义类变量@@v.真正的问题是,为什么这样做会奏效?classC@@v=1class答案似乎是,为了您的方便,无论
我一直在看一些文章说classvariablesarebadinRuby.他们建议使用元类(或单例类)。这是我的示例代码classJoeclass我知道foo和foo2本质上是一样的,尽管无法将attr_accesor与foo2一起使用。我不明白class是怎么回事.是否发生了某种串联,或者......它是什么?这是某种扩展、继承或猴子修补吗?编辑(奖励):我在这里,有没有办法在View助手上缓存数据?我试过使用这个类 最佳答案 classsyntax代表“在foo类的定义中”。所以如果你这样做:classFooclass这类似于c