簡體   English   中英

可調用的問題,檢測到超過__call__

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM