假設我實現了一個名爲MyClass
的類。我知道可以爲我定義的類實現內置函數專門的行爲。例如,我可以實現MyClass.__repr__
,如果我在MyClass
的實例上使用它,將會調用它。因爲range
也是一個內置函數,是否有可能爲MyClass
實現range
的專門行爲?定義專門用於內置(或不)類型的python內置範圍
讓我們假設我有一個類,我知道我可以迭代(就像我知道我可以迭代整數)。例如分數:
>>> from fractions import Fraction as F
>>> range(F(0,3),F(3,3),F(1,3))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: range() integer end argument expected, got Fraction.
很明顯,我可以用不同的名稱來實現它們。我只是好奇鴨子打字方法能走多遠。
編輯:range(F(0,3),F(3,3),F(1,3))
的預期行爲是返回[F(0,3), F(1,3), F(2,3)]
。
編輯:所以我們不關注分數,我舉另一個例子。我使用物理尺寸庫(品脫)。假設我想從0秒到10秒迭代1秒。
>>> from pint import UnitRegistry
>>> from numpy import arange
>>> ur = UnitRegistry()
>>> arange(0*ur.s, 10*ur.s, 1*ur.s)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: setting an array element with a sequence.
>>> range(0*ur.s, 10*ur.s, 1*ur.s)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "build/bdist.linux-x86_64/egg/pint/quantity.py", line 365, in __int__
pint.errors.DimensionalityError: Cannot convert from 'second' to 'dimensionless'
[Python十進制範圍()步長值](http://stackoverflow.com/a/477610/2301450) – vaultah
是的,他們定義了另一個名爲'whatever_range'的方法,它可以工作。我想知道是否可以實現它,以便當我調用'range'時,它會調用我的'whatever_range'。 – Emilien
'range = whatever_range',或更改CPython的源代碼。 – vaultah