检查方法是否是来自元类的静态方法

时间:2018-05-20 11:58:13

标签: python methods static metaclass

我有一个用例,我使用元类来装饰类的实例方法。

class DecoratedMeta(type):

    def __new__(mcs, name, bases, attrs):
        cls = super(DecoratedMeta, mcs).__new__(mcs, name, bases, attrs)

        for attr_name in dir(cls):
            if mcs.is_valid(getattr(cls, attr_name)):
                setattr(cls, attr_name, mcs.decorate(getattr(cls, attr_name))) 
        return cls

方法is_valid应确定底层属性是cls(或其基类之一)的实例方法还是静态类cls(或其中一个基类)。

getattr将实例方法和静态方法作为函数返回。那么我如何确定它是静态还是实例方法?

我不仅可以依赖cls.__dict__,因为它不包含基类的属性,我宁愿不手动检查继承树中所有类的__dict__

我目前通过检查方法的第一个参数是self来解决这个问题,但有更好的方法吗?

0 个答案:

没有答案