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

标签 python methods attributes

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

def fn1(): pass
fn1.mark = True

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

class A:
    def meth1(): pass
    meth1.mark = True

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

>>> fn1.mark
True
>>> A.meth1.mark
True
>>> A().meth1.mark
True

但是,该属性不能在绑定(bind)方法中赋值或删除,因为它可以在函数中:

>>> A().meth1.mark = False
AttributeError: 'method' object has no attribute 'mark'

>>> del A().meth1.mark
AttributeError: 'method' object has no attribute 'mark'

方法的属性在绑定(bind)时如何显示?

最佳答案

方法对象实现 __getattribute__ 以将未知属性的属性访问委托(delegate)给底层函数对象。但是,他们不委托(delegate) __setattr__,这就是分配失败的原因。如果您想查看代码,它是 method_getattroObjects/classobject.c 中。

关于python - 方法如何透明地查看函数属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53070401/

相关文章:

java - 无法访问类中 protected 最终同步方法

python - 当类的任何属性被修改时,类如何运行某些功能?

python - 在 Python 中过滤 xml 数据

python - 包内导入并不总是有效

python - 在 Python 中,什么是全局语句?

c# - 如何在我的属性中设置动态值

从另一台服务器下载时,HTML5 下载属性不起作用,即使 Access-Control-Allow-Origin 设置为全部 (*)

python - Django:python manage.py migrate 什么都不做

java - Java 掷骰子分配 : Calling a Method

Java,如何在java中的方法之间发送数组?