我有一个类对象,cls。我想知道它的元类。我该怎么做?(如果我想知道它的父类,我会做cls.__mro__。有这样的东西来获取元类吗?) 最佳答案 好的-所以,一个类的元类只是它自己的“类型”,可以由type(cls)和其他方式,例如cls.__class__。在Python3.x中没有进一步的歧义——因为创建元类的语法只是将它作为命名参数传递给类声明语句。但是,用于在Python2.x中创建元类的语法会产生一个值得注意的副作用。做完classA(object):__metaclass__=MyMeta__metaclass__属性
这里有龙。您已收到警告。我正在考虑创建一个新库,以尝试帮助编写更好的测试套件。为了做到这一点,其中一个功能是验证正在使用的任何对象不是测试运行器和systemundertest的功能。有一个测试替身(模拟对象、stub、假对象或虚拟对象)。如果测试人员想要事件对象并因此减少测试隔离,则必须明确指定。我看到的唯一方法是覆盖内置的type()函数,它是默认的元类。新的默认元类将检查测试替身注册表字典以查看它是否已被替换为测试替身或者是否指定了事件对象。当然,这通过Python本身是不可能的:>>>TypeError:can'tsetattributesofbuilt-in/extensio
在这个众所周知的answer这解释了Python中的元类。它提到__metaclass__属性不会被继承。但事实上,我在Python中尝试过:classMeta1(type):def__new__(cls,clsname,bases,dct):print"UsingMeta1"returntype.__new__(cls,clsname,bases,dct)#"UsingMeta1"printedclassFoo1:__metaclass__=Meta1#"UsingMeta1"printedclassBar1(Foo1):pass正如预期的那样,Foo和Bar都使用Meta1作为元类
我正在尝试编写一个通用元类来跟踪子类因为我希望它是通用的,所以我不想在这个元类中硬编码任何类名,因此我想出了一个函数来生成正确的元类,比如:defmake_subtracker(root):classSubclassTracker(type):def__init__(cls,name,bases,dct):print('registering%s'%(name,))root._registry.append(cls)super(SubclassTracker,cls).__init__(name,bases,dct)returnSubclassTracker这样我就可以调用它为特定的r
这是unittestandmetaclass:automatictest_*methodgeneration的后续问题:对于这个(固定的)unittest.TestCase布局:#!/usr/bin/envpythonimportunittestclassTestMaker(type):def__new__(cls,name,bases,attrs):callables=dict([(meth_name,meth)for(meth_name,meth)inattrs.items()ifmeth_name.startswith('_test')])formeth_name,methinc
我正在学习Python中的元类。我认为这是一种非常强大的技术,我正在为它们寻找好的用途。我想要一些有关使用元类的实用示例的反馈。我不是在寻找有关如何编写元类的示例代码(那里有很多无用的元类的示例),而是在您应用该技术的真实示例中,它确实是合适的解决方案。规则是:没有理论上的可能性,但元类在实际应用程序中起作用。我将从我知道的一个例子开始:Django模型,用于声明式编程,其中基类Model使用元类从属性定义中填充有用ORM功能的模型对象。期待您的贡献。 最佳答案 在Python2.6和3.1中,Python标准库提供了一个abc.A
为了设置类的元类,我们使用__metaclass__属性。元类在定义类时使用,因此在类定义后显式设置它无效。这是当我尝试显式设置元类时发生的情况;>>>classMetaClass(type):def__new__(cls,name,bases,dct):dct["test_var"]=Truereturntype.__new__(cls,name,bases,dct)def__init__(cls,name,bases,dct):super(MetaClass,cls).__init__(name,bases,dct)>>>classA:__metaclass__=MetaClass
我读了WhatisametaclassinPython?我尝试从示例中复制上层元类,但发现这并非在所有情况下都有效:defupper(cls_name,cls_parents,cls_attr):"""Makeallclassattributesupppercase"""attrs=((name,value)forname,valueincls_attr.items()ifnotname.startswith('__'))upper_atts=dict((name.upper(),value)forname,valueinattrs)returntype(cls_name,cls_pa
我发现(在StackOverflow上的另一个问题之后)这个用Python编写的有趣的库,其目标是语法解析。http://code.google.com/p/modgrammar/我还找到了关于它的教程:http://packages.python.org/modgrammar/tutorial.html所以,在阅读了所有教程之后,我明白这就是我要找的东西!我尝试编写教程中的第一个示例:frommodgrammarimport*classMyGrammar(Grammar):grammar=(LITERAL("Hello,"),LITERAL("world!"))但是我遇到了这个错误:
1#-*-coding:utf-8-*-2"""3@Time:2023-06-2523:144@Description:5@Author:Mr.Gu6"""7importtime8importtypes91011classMeta(type):12def__new__(cls,name,bases,attrs):13forkey,valueinattrs.items():14ifisinstance(value,types.FunctionType)andnotkey.startswith("_"):15attrs[key]=property(value)16returnsuper().__n