template<class T> class Foo : T { voID fun() {} }解决方法 虽然它确实可以用元类来完成,但是你可以在没有它们的情况下做你想做的事情,因为Python类本身就是对象.令人惊讶的是,基本上只需要对C代码进行几乎一对一的翻译.除了相对简单之外,它还可以在Python 2和DSP中无需修改地工作. 3.
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 Fooclass 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()
输出:
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的洞察力(在一个现已删除的注释中)的启发,关于调试时可能产生的混淆,如果制造的类总是具有相同的名称.
总结以上是内存溢出为你收集整理的c – Metaclass参数化继承全部内容,希望文章能够帮你解决c – Metaclass参数化继承所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)