2014-02-15 73 views
1

Python支持很多神奇的方法來實現對象中的自定義功能,例如__lt____getattr__等。甚至有一些神奇的方法會影響某些內置函數的執行方式,例如__len____instancecheck__。但是Python中的所有內置函數都有神奇的方法嗎?python對所有內置函數都有神奇的方法嗎?

例如,如果我想改變any函數對某個類的執行方式,我可以在該類中指定一個__any__魔法方法嗎?如果這不是一個選項,有什麼方法可以特別影響any適用於該類的方式嗎? (我知道,如果我想爲any接收來自迭代的項目我可以定義__iter__的方式特殊的功能,但是這不是我所希望做的)

請注意,我的願望實現自定義的功能爲any只是一個例子,我不明確想要爲any定義自定義功能。

+1

沒有,有大量的內置功能,其中掛鉤是沒有意義的。例如'chr()'或'id()'。 –

+0

@MartijnPieters,如果你正在使用自己的數字類型,你可以在任何可以使用int的地方使用它,它對'chr'有一定的意義。 –

+0

@MikeGraham實際上,可以通過定義'__int__'來完成,這更適合於這個目的。 – delnan

回答

4

這個特殊的方法讓你勾起概念,沒有那麼多的內置函數或其他東西。

__len__是一個容器長度,不是專門爲len()函數掛鉤。恰巧len()函數是該功能的可見API。

any()預計可迭代參數,您在這裏尋找的概念是Iterator type methods;它不是被吸引的功能,而是這個概念。

您可能想研究default type abstract base classes以查看Python類型實現的方法;這裏有許多特殊的方法以可讀的概述組合在一起。

+0

「*'any()'期望* iterator *參數」否,'any'需要* iterable *參數。 –

+0

@MikeGraham:確實,它調用了iter(),所以迭代就足夠了。出於某種原因,我仍然使用術語可互換,但有一個區別,我應該注意更多.. –

1

不,只適用於其中的大部分,視實際需求而定。

(具體爲__any__it has been discussed之前,但最終,它不被認爲是必要的。)

相關問題