c – Metaclass参数化继承

前端之家收集整理的这篇文章主要介绍了c – Metaclass参数化继承前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经阅读了一些关于 Python元类的教程.我之前从未使用过一个,但我需要一个相对简单的东西,所有的教程似乎都面向更复杂的用例.我基本上想要创建一个具有一些预先指定的主体的模板类,但是将其基类作为参数.由于我从C / D模板中得到了这个想法,这里有一个我想写的代码在C中的样子: @H_502_2@template<class T> class Foo : T { void fun() {} }

解决方法

虽然它确实可以用元类来完成,但是你可以在没有它们的情况下做你想做的事情,因为Python类本身就是对象.令人惊讶的是,基本上只需要对C代码进行几乎一对一的翻译.除了相对简单之外,它还可以在Python 2和DSP中无需修改地工作. 3. @H_502_2@def template(class_T): """Factory function to create subclasses of class_T.""" class Foo(class_T): def fun(self): print('%s.fun()' % self.__class__.__name__) Foo.__name__ += '_' + class_T.__name__ # rename the subclass to reflect its heritage return Foo class Base1: def bar(self): print('Base1.bar()') class Base2: def bar(self): print('Base2.bar()') Foo_Base1 = template(Base1) print('Foo_Base1 base classes: {}'.format(Foo_Base1.__bases__)) Foo_Base2 = template(Base2) print('Foo_Base2 base classes: {}'.format(Foo_Base2.__bases__)) subclass1 = Foo_Base1() subclass1.fun() subclass1.bar() subclass2 = Foo_Base2() subclass2.fun() subclass2.bar()

输出

@H_502_2@Foo_Base1 base classes: (<class __main__.Base1 at 0x00A79C38>,) Foo_Base2 base classes: (<class __main__.Base2 at 0x00A79DC0>,) Foo_Base1.fun() Base1.bar() Foo_Base2.fun() Base2.bar()

(univginatively-named)template()函数中的代码是通常称为class factory或Factory模式的实现的示例.所以,顺便说一句,你可能会发现0700问题What exactly is a Class Factory?的信息量.

编辑:添加代码,为每个返回的子类创建不同的类名 – 这是受@ aaronasterling的洞察力(在一个现已删除的注释中)的启发,关于调试时可能产生的混淆,如果制造的类总是具有相同的名称.

原文链接:https://www.f2er.com/c/239699.html

猜你在找的C&C++相关文章