【python全栈开发_day29_元类(下)】教程文章相关的互联网学习教程文章

在python中使用元类创建类的新实例【代码】

我想在python中动态创建一个具有特定元类的类的新实例. 我试过这个:type('A', (object, metaclass=tmp, ), {})但不起作用:( 有谁知道我怎么能做到这一点?解决方法:元类通常是类型的子类,(或者很少将函数作为参数,base,clsdict作为参数),因此您应该能够像类型一样使用它.如果tmp是你的元类,那么试试:tmp('A',(object,),{})

python – 与Django中的modelformset_factory的元类冲突【代码】

我正在使用Django模型继承来创建两个模型 – WorkAttachmentPicture和WorkAttachmentAudioclass WorkAttachment(models.Model):""" Abstract class that holds all fields that are required in each attachment """work = models.ForeignKey(Work)added = models.DateTimeField(default=datetime.datetime.now)views = models.IntegerField(default=0)class Meta:abstract = Trueclass WorkAttac...

python面向对象高级编程——使用元类【代码】

使用元类 type() 动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的。 比方说我们要定义一个Hello的class,就写一个hello.py模块: class Hello(object):def hello(self, name='world'):print('Hello, %s.' % name)当Python解释器载入hello模块时,就会依次执行该模块的所有语句,执行结果就是动态创建出一个Hello的class对象,测试如下: >>> from hello import Hello >>> h = Hello() ...

python – 使用元类和多重继承的TypeErrors【代码】

我有两个问题,即转换元类和多重继承.第一个是:为什么我为Derived类获取TypeError而不是Derived2?class Metaclass(type): passclass Klass(object):__metaclass__ = Metaclass#class Derived(object, Klass): pass # if I uncomment this, I get a TypeErrorclass OtherClass(object): passclass Derived2(OtherClass, Klass): pass # I do not get a TypeError for this确切的错误消息是: TypeError:调用元类库时出错 无法...

python – 如何使用元类的多重继承?【代码】

我正在尝试使用注册表模式注册我使用Flask-RESTFUL定义的所有资源.from flask_restful import Resourceclass ResourceRegistry(type):REGISTRY = {}def __new__(cls, name, bases, attrs):new_cls = type.__new__(cls, name, bases, attrs)cls.REGISTRY[new_cls.__name__] = new_clsreturn new_cls@classmethoddef get_registry(cls):return dict(cls.REGISTRY)class BaseRegistered(object):__metaclass__ = ResourceRegistryclas...

理解Python中的元类【代码】

1.引入 Python中一切皆对象,所谓对象就是由类创建出来,那么创建对象的类本身也是一个对象,也就是说创建对象的类本身也由别的什么类创建,这种创建类的类就叫元类. 2.元类是谁? type函数就是元类,没错就是那个打印数据类型的函数,也就是说是type创建了类. 我们写一个类然后打印一下他的属性看看 In [4]: class MyClass(object): ...: pass ...: ...

python – TypeError:元类冲突:派生类的元类必须是其所有基类的元类的(非严格)子类【代码】

尝试使用类创建GUI,我一直遇到此错误的问题.我不确定这意味着什么,因为我只能看到一个班级,我的错误是:Traceback (most recent call last): File "C:/Users/Blaine/Desktop/Computing Project.py", line 5, in <module> class SneakerSeeker(tk,Frame): TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases我的代码是:from tkinter import ...

python – 元类冲突,多重继承和实例作为父级

我一直在搞乱Python的黑暗艺术,我想帮助理解.给定一个类Foo,这里有一些我试图从它继承的方法: > A级(Foo) – 工作,毫无疑问> B类(Foo()) – 作品提供Foo有一个合适的__new__方法(我提供)> C类(Foo(),Foo) – 在与B相同的条件下工作> class D(Foo,Foo()) – 给出了着名的元类错误:Traceback (most recent call last): File “test.py”, line 59, in class D(Foo, Foo()):TypeError: metaclass conflict: the metaclass...

在Python 3中使用元类重新定义__init__【代码】

我正在学习python 3中的元编程.我的教授确实给了我们这个练习: 编写元类法术,用于在向导中转换学生的实例. 我这样做了:class Spell(type):def __new__(cls, classname, supers, cls_dict):cls_dict['__init__'] = Spell.toWizard()cls_dict['__qualname__'] = 'wizard'return type.__new__(cls, 'wizard', supers, cls_dict)@staticmethoddef toWizard():def init(*args):wizard(args, 'fire_spell')return init class studen...

python元类继承问题【代码】

我有一个奇怪的元类问题.我正在使用元类来动态创建一个继承自另一个超类的“兄弟”类,并将其作为原始类的属性赋值.以下是最小化设置:class Meta(type): def __new__(cls, name, parents, dct):sdct = dct.copy()dct['sibling'] = type(name+'Sibling', (Mom,), sdct)return super().__new__(cls, name, (Dad,), dct)class Mom:def __init__(self):self.x = 3class Dad:def __init__(self):self.x = 4class Child(metaclass=Meta):...

python – 子类__module__在手动创建带类型()的新类时设置为元类模块【代码】

在下面的示例中,新创建的子类最终是元类__module__而不是父类的模块.我只是在使用ABCMeta时才发现这种情况,因此它可能是该模块的特定内容,任何人都知道可能会发生什么?In [1]: from abc import ABCMetaIn [2]: class test(metaclass=ABCMeta):...: pass...: In [3]: newclass = type('newclass', (test,), {})In [4]: newclass.__module__ Out[4]: 'abc'当我以更标准的方式定义子类时,我想要的行为发生:In [5]: class subtes...

python3元类的调用顺序【代码】

在尝试理解元类创建类实例的顺序时,我感到困惑.根据该图(source), 我键入以下代码进行验证.class Meta(type):def __call__(self):print("Meta __call__")super(Meta, self).__call__()def __new__(mcs, name, bases, attrs, **kwargs):print("Meta __new__")return super().__new__(mcs, name, bases, kwargs)def __prepare__(msc, name, **kwargs):print("Meta __prepare__")return {}class SubMeta(Meta):def __call__(self):pri...

Python之难点元类|一句话给你安排的明明白白【代码】【图】

type生元类,元类生类,类生对象 换句话就是 道系元类解读,生就完了 话不多说上代码来理解:def fn1(self,name=world):print(Hello,%s%name) def fn2(self,name=world):print(Hi,%s%name)Hello = type(Hello,(object,),dict(say_hi=fn1,hi=hello)) Hi = type(Hello,(object,),dict(say_hi=fn2,hi=hi)) # 生成Hello类的对象 hello1 = Hello() hello1.say_hi() print(hello1.hi) print(hello1)print(-*50) # 华丽分割线 # 生成Hi类...

在Python 3中确定一个类的元类【代码】

在Python 2中,我可以检查一个类的__metaclass__属性来确定它的元类. 我在Python 3中如何做同样的事情?解决方法:使用单参数类型函数(类型(类)),或只访问类.__ class__.这两个都在Python 2中运行,顺便说一下. 例如.,In [4]: class MyMetaclass(type): passIn [5]: class MyClass(metaclass=MyMetaclass): passIn [6]: type(MyClass) Out[6]: __main__.MyMetaclass

python – 仅为子类使用元类【代码】

在Python 3.2或更高版本中是否有一种方法可以定义一个类,其子类应该使用特定的元类创建而不使用该元类创建类本身? 举例来说明我的意思:假设我想创建一个Enum类,其子类可用于定义枚举类型.枚举类型将具有固定数量的实例,每个实例具有不同的int(或其他)值.枚举类型将通过创建Enum的子类并将值分配给该类的属性来声明.通过Enum的元类,这些属性的值将被新类的实例替换. Enum类还可以定义一些可以在其子类或其实例上使用的类或实例方法...