我有一个装饰器,用于记录装饰函数的名称(除其他外)。
访问装饰函数的 __name__
属性是否安全?或者是否有一些我还没有遇到过的没有名称的可调用类型?
最佳答案
用其他答案和评论的摘要来回答我自己的问题。
并非所有可调用对象都有 __name__
。
__call__
的类的实例可能没有 __name__
属性。 functools.partial
创建的对象没有 __name__
属性。 解决方法是使用三个参数
getattr
:name = getattr(callable, '__name__', 'Unknown')
或者使用
repr(callable)
而不是 'Unknown'
,这将包含有关可调用的更多信息:name = getattr(callable, '__name__', repr(callable))
关于python - 是否所有可调用对象都有 __name__?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33576932/