草庐IT

metaclass

全部标签

python - Python 3.5 中的抽象方法体

这个问题在这里已经有了答案:WhatshouldIputinthebodyofanabstractmethod?(2个答案)关闭5年前。我有一个抽象类,Model,有几个抽象方法,我应该在方法体中放些什么?返回classModel(metaclass=ABCMeta):@abstractmethoddeffoo(self):return通过classModel(metaclass=ABCMeta):@abstractmethoddeffoo(self):pass提出描述性错误classModel(metaclass=ABCMeta):@abstractmethoddeffoo(self

python - Sphinx 文档模块属性

我有一个模块应该有一个@property,我通过将一个类设置为模块来解决这个问题。我从这个答案中得到了这个想法:Lazymodulevariables--canitbedone?我希望它可重复且易于使用,所以我为它制作了一个元类。这就像一个魅力。问题是当使用Sphinx生成文档时,属性没有被记录下来。其他一切都按预期记录。我不知道如何解决这个问题,也许这是Sphinx的问题?模块:importsysimporttypesclassClassAsModule(type):def__new__(cls,name,bases,attrs):#Makesurethenameoftheclass

python - 跟踪子类的通用元类?

我正在尝试编写一个通用元类来跟踪子类因为我希望它是通用的,所以我不想在这个元类中硬编码任何类名,因此我想出了一个函数来生成正确的元类,比如: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

python - 类实例上元类的方法

我想知道在元类上声明的方法会发生什么。我希望如果您在元类上声明一个方法,它最终将成为一个类方法,但是,行为是不同的。示例>>>classA(object):...@classmethod...deffoo(cls):...print"foo"...>>>a=A()>>>a.foo()foo>>>A.foo()foo但是,如果我尝试定义一个元类并给它一个方法foo,它似乎对类有效,但对实例无效。>>>classMeta(type):...deffoo(self):...print"foo"...>>>classA(object):...__metaclass__=Meta...def__

python - Nose 、unittest.TestCase 和元类 : auto-generated test_* methods not discovered

这是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 - 有没有办法在类定义之后设置元类?

为了设置类的元类,我们使用__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

模块级的 python 元类

我读了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

Python 元类和 ModGrammar

我发现(在StackOverflow上的另一个问题之后)这个用Python编写的有趣的库,其目标是语法解析。http://code.google.com/p/modgrammar/我还找到了关于它的教程:http://packages.python.org/modgrammar/tutorial.html所以,在阅读了所有教程之后,我明白这就是我要找的东西!我尝试编写教程中的第一个示例:frommodgrammarimport*classMyGrammar(Grammar):grammar=(LITERAL("Hello,"),LITERAL("world!"))但是我遇到了这个错误:

python - 有人在 Python/其他语言中使用 meta-meta-classes/meta-meta-meta-classes 吗?

我最近发现了python中的元类。基本上,python中的元类是创建类的类。有很多有用的理由可以解释为什么要这样做——例如任何类型的类初始化。在工厂上注册类、复杂的属性验证、改变继承的工作方式等。所有这些不仅可能而且变得简单。但是在python中,元类也是普通类。所以,我开始想知道抽象是否可以有用地提高,在我看来它可以而且:元类对应于或实现模式中的角色(如GOF模式语言)。元-元类是模式本身(如果我们允许它创建表示抽象角色的类的元组,而不仅仅是单个类)元元元类是一个模式工厂,对应于GOF模式分组,例如创造的,结构的,行为的。一个工厂,您可以在其中描述特定类型问题的案例,它会为您提供一组

python - 有人在 Python/其他语言中使用 meta-meta-classes/meta-meta-meta-classes 吗?

我最近发现了python中的元类。基本上,python中的元类是创建类的类。有很多有用的理由可以解释为什么要这样做——例如任何类型的类初始化。在工厂上注册类、复杂的属性验证、改变继承的工作方式等。所有这些不仅可能而且变得简单。但是在python中,元类也是普通类。所以,我开始想知道抽象是否可以有用地提高,在我看来它可以而且:元类对应于或实现模式中的角色(如GOF模式语言)。元-元类是模式本身(如果我们允许它创建表示抽象角色的类的元组,而不仅仅是单个类)元元元类是一个模式工厂,对应于GOF模式分组,例如创造的,结构的,行为的。一个工厂,您可以在其中描述特定类型问题的案例,它会为您提供一组