草庐IT

python - 如何使用元类添加方法

如何使用元类向类添加实例方法(是的,我确实需要使用元类)?以下类型的作品,但func_name仍将是“foo”:defbar(self):print"bar"classMetaFoo(type):def__new__(cls,name,bases,dict):dict["foobar"]=barreturntype(name,bases,dict)classFoo(object):__metaclass__=MetaFoo>>>f=Foo()>>>f.foobar()bar>>>f.foobar.func_name'bar'我的问题是某些库代码实际上使用了func_name,但后来找不

python - 在 Django 模型中继承元类

我有一个新手问题,我正在寻找与Django类中Meta类继承相关的概念。以下是模型,如果有人能帮助我,我将不胜感激。classBase(models.Model):code=AutoSlugField(_("Slug"),max_length=128,unique=True,populate_from='name')name=models.CharField(_("Name"),max_length=128,unique=True)description=models.TextField(_("Description"),blank=True)countries=models.Many

python - 在 Django 中使用元类

谁能解释一下为什么在下面的例子中使用元类。例如:ClassEmployee(models.Model):name=models.ForeignKey(name)Gender=models.IntegerField()classMeta:ordering=["Gender"]谢谢。 最佳答案 Django模型使用Meta类来包含关于模型的额外信息,这些信息不一定适合包含在模型类本身中。请注意,这与Python的元类不相同;那是一个完全不同的话题。在这种情况下,它按字段“性别”对该模型的查询进行排序或排序

Python:元类一直向下

我有一个涉及Python元类的深奥问题。我正在为Web服务器端代码创建一个Python包,这将使通过客户端代理访问任意Python类变得容易。我的代理生成代码需要我想包含在我的API中的所有Python类的目录。为创建此目录,我使用__metaclass__特殊属性将Hook放入类创建过程中。具体来说,“已发布”API中的所有类都将继承一个特定的基类PythonDirectPublic,它本身有一个__metaclass__已被设置为记录有关类创建。到目前为止一切顺利。复杂的地方在于我希望我的PythonDirectPublic本身继承自第三方类(enthought.traits.ap

python - 使用元类覆盖复杂内置方法

作为一个学习练习,我正在尝试实现一个模拟python的complex内置行为的类,但__str__和的行为不同>__repr__方法:我希望它们以格式打印...(1.0,2.0)...而不是:(1+2j)我首先尝试简单地从complex子类化并重新定义__str__和__repr__,但这有一个问题,当调用非覆盖方法时,返回一个标准的complex,并以标准格式打印:>>>a=ComplexWrapper(1.0,1.0)>>>a(1.0,1.0)>>>b=ComplexWrapper(2.0,3.0)>>>b(2.0,3.0)>>>a+b(3+4j)当期望的输出是(3.0,4.0)时

python - 为 Python 3.6 元类提供 __classcell__ 示例

根据3.6.0文档:CPythonimplementationdetail:InCPython3.6andlater,the__class__cellispassedtothemetaclassasa__classcell__entryintheclassnamespace.Ifpresent,thismustbepropagateduptothetype.__new__callinorderfortheclasstobeinitializedcorrectly.FailingtodosowillresultinaDeprecationWarninginPython3.6,andaRu

Python 继承、元类和 type() 函数

我无法理解为什么以下代码会以特定方式运行,如下所述:fromabcimportABCMetaclassPackageClass(object):__metaclass__=ABCMetaclassMyClass1(PackageClass):passMyClass2=type('MyClass2',(PackageClass,),{})printMyClass1printMyClass2>>>>>>为什么repr(MyClass2)说abc.MyClass2(顺便说一句,这不是真的)?谢谢! 最佳答案 问题源于ABCMeta覆盖__

python - 未在子类中调用元类

这是一个pythonsession。>>>classZ(type):def__new__(cls,name,bases,attrs):printclsprintnamereturntype(name,bases,attrs)...>>>classY(object):__metaclass__=Z...Y>>>classX(Y):...pass...>>>classW(Y):...__metaclass__=Z...W>>>在我定义了类X之后,我希望为它调用Z._new__,并打印两行,但这并没有发生,(因为元类是继承的?) 最佳答案

python - TypeError: 调用元类基础时出错,新样式类不能只有经典基础

类的集合定义为:classA():@staticmethoddefcall():print('a')classC(type):def__repr__(self):return'somename'classB(A):__metaclass__=C@staticmethoddefcall():print('b')defboundcall(self):print('bound')运行时报错:TypeError:Errorwhencallingthemetaclassbasesanew-styleclasscan'thaveonlyclassicbases我需要元类(我认为)在我的代码中具有B

python - Ruby 对 Python 元类的模拟是什么?

Python具有元类的概念,如果我理解正确的话,它允许您在构造时修改类的对象。您不是在修改类,而是修改要创建然后初始化的对象。Python(我相信至少从3.0开始)也有类装饰器的概念。同样,如果我理解正确,类装饰器允许在声明类定义时对其进行修改。现在我相信在Ruby中有一个或多个与类装饰器等效的功能,但我目前不知道与元类等效的东西。我敢肯定,您可以轻松地通过一些函数来抽取任何Ruby对象,并按照您的意愿对其进行操作,但是语言中是否有一种功能可以像元类那样进行设置?再一次,Ruby是否有类似于Python的元类的东西?编辑我不在乎Python的元类。元类和类装饰器做的事情看起来非常相似。