[英]Instance is not passed to the `__call__` function of a callable class
[英]issue with callable, detects more than __call__
我正在測試simpleTAL模板庫,該庫利用callable來測試傳遞到模板中的對象是否為函數。 callable的定義表示,如果對象包含魔術方法__call__
,則該對象是可__call__
。 另請參見什么是Python中的“可調用”? 。
但是,使用以下類定義創建的對象(python 2.7.4)
class H:
def __init__(self, val):
self.a = val
def __getattr__(self, name):
return 'blah'
h = H(1)
callable(h)
將返回True。 但是,如果__getattr__
引發AttributeError,而這在系統上沒有意義,那么它將返回False!
有人可以闡明這個問題並可能提供解決方案嗎? (我不希望h可以被呼叫)。
您的__getattr__
掛鈎返回所有屬性的值:
>>> h.__call__
'blah'
因此對hasattr(h, '__call__')
返回True
:
>>> hasattr(h, '__call__')
True
確保針對該對象不支持的AttributeError
引發AttributeError
。
注意:這僅適用於老式的實例; 不會測試__call__
屬性的新類的實例(Python 3中的默認值,以及從Python 2中的任何繼承自object
類)。 而是咨詢班級本身。
因此,您也可以切換到新型類來減輕這種情況,但是__getattr__
仍然不能太寬泛。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.