方法如何透明地查看函数属性

我最近编写了一些需要标记属性的函数:


def fn1(): pass

fn1.mark = True

实际的标记是由装饰者完成的,但它既不在这里也不在那里。我担心的是,当我以相同的方式标记类中的方法时,在绑定方法时标记将不可见:


class A:

    def meth1(): pass

    meth1.mark = True

但实际上该属性是可见的:


>>> fn1.mark

True

>>> A.meth1.mark

True

>>> A().meth1.mark

True

但是,不能在绑定方法中分配或删除属性,因为它可以在函数中:


>>> A().meth1.mark = False

AttributeError: 'method' object has no attribute 'mark'


>>> del A().meth1.mark

AttributeError: 'method' object has no attribute 'mark'

方法的属性在绑定时如何使其可见?


慕丝7291255
浏览 112回答 1
1回答

LEATH

方法对象实现__getattribute__将未知属性的属性访问委托给底层函数对象。__setattr__但是,他们不委托,这就是分配失败的原因。如果你想看代码,它method_getattro在Objects/classobject.c.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python