美文网首页
python 用元类检查做约束

python 用元类检查做约束

作者: SkTj | 来源:发表于2019-12-04 11:06 被阅读0次

下面有一个元类,它用来检测重载方法,确保它的调用参数跟父类中原始方法有着相同的参数签名

from inspect import signature
import logging

class MatchSignaturesMeta(type):

def __init__(self, clsname, bases, clsdict):
    super().__init__(clsname, bases, clsdict)
    sup = super(self, self)
    for name, value in clsdict.items():
        if name.startswith('_') or not callable(value):
            continue
        # Get the previous definition (if any) and compare the signatures
        prev_dfn = getattr(sup,name,None)
        if prev_dfn:
            prev_sig = signature(prev_dfn)
            val_sig = signature(value)
            if prev_sig != val_sig:
                logging.warning('Signature mismatch in %s. %s != %s',
                                value.__qualname__, prev_sig, val_sig)

Example

class Root(metaclass=MatchSignaturesMeta):
pass

class A(Root):
def foo(self, x, y):
pass

def spam(self, x, *, z):
    pass

Class with redefined methods, but slightly different signatures

class B(A):
def foo(self, a, b):
pass

def spam(self,x,z):
    pass

运行结果

WARNING:root:Signature mismatch in B.spam. (self, x, *, z) != (self, x, z)
WARNING:root:Signature mismatch in B.foo. (self, x, y) != (self, a, b)

相关文章

  • python 用元类检查做约束

    下面有一个元类,它用来检测重载方法,确保它的调用参数跟父类中原始方法有着相同的参数签名 from inspect ...

  • python 元类做类型检查

    作为一个具体的应用例子,下面定义了一个元类,它会拒绝任何有混合大小写名字作为方法的类定义 class NoMixe...

  • Python 进阶丨如何创建你的第一个 Python 元类?

    摘要:通过本文,将深入讨论Python元类,其属性,如何以及何时在Python中使用元类。 Python元类设置类...

  • 14/15

    约束模板友元 模板类的外边定义一个模板函数,在模板类中将模板函数具体化为模板类的友元函数 非约束模板友元 模板类中...

  • python中的元类和abc.ABCMeta实现的虚类

    一、元类要理解元类,需要先理解python中的类,用class修饰的都可以叫做类,例如 而在python中远远不止...

  • 10.元类

    元类的对象是类type是python的内建元类 自定义元类:

  • 29.Python之面向对象的元类

    Python之面向对象的元类 什么是元类?类的类就是元类,元类创建对象。使用class定义的类,用来产生程序员自己...

  • Python 元类

    什么是元类?元类就是创建类的类,type是最原始的一个元类。(实例是实例化的类,而类是元类的实例)python中一...

  • scala类与伴生类、单例

    类似python元类与apply方法类似python中call方法

  • python 元类

    转载 刘仲雨 两句话掌握python最难知识点——元类 千万不要被所谓“元类是99%的python程序员不会用到的...

网友评论

      本文标题:python 用元类检查做约束

      本文链接:https://www.haomeiwen.com/subject/saibvctx.html