栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

python2和python3之间的可移植元类

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python2和python3之间的可移植元类

您可以将

metadocument()
元类用作工厂来产生 替换 您的
document
类的类,从而重新使用类属性:

class document(object):    # various and sundry methods and attributesbody = vars(document).copy()body.pop('__dict__', None)body.pop('__weakref__', None)document = metadocument(document.__name__, document.__bases__, body)

这不需要您手动构建第三个参数,即类主体。

您可以将其变成类装饰器:

def with_metaclass(mcls):    def decorator(cls):        body = vars(cls).copy()        # clean out class body        body.pop('__dict__', None)        body.pop('__weakref__', None)        return mcls(cls.__name__, cls.__bases__, body)    return decorator

然后用作:

@with_metaclass(metadocument)class document(object):    # various and sundry methods and attributes

或者,为此使用

six
库:

@six.add_metaclass(metadocument)class document(object):

其中,

@six.add_metaclass()
装饰也需要的任何照顾
__slots__
你可能已经定义;
我上面的简单版本没有。

six
还有一个
six.with_metaclass()
基层工厂:

class document(six.with_metaclass(metadocument)):

这为MRO注入了额外的基类。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/662356.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号