我正在编写一个__index__
的广义实现,用于我的一些更多分支的课程,我想在这里向人群询问它的智慧。
简而言之,我希望将一组int(n维索引)转换为int(从__index__
返回,保持为实例状态)并返回(设置/更改它)(或也许是不变的?)。同样的字符串(' A4',' C17',' CDE42',' CDE42YUP420',' CDE42YUP420DEEP42'等)
无论如何,这是我到目前为止所想的。我知道它目前只是一个骨架,但我认为这有助于解决问题的重点。当我在Idx上工作时,我会更新我的问题。一旦实施得足以开始尝试它的版本,我会得到一些timeit结果。
我很感激任何想法。谢谢!
class Idx:
__slots__ = 'idx',
def __init__(self, idx):
## Sorry about the if/elif block. It's for brevity
if isinstance(idx, int):
self.idx = idx
elif isinstance(idx, tuple):
## idx == (0, 0) | (1920, 1080) | (42, 0, 420) ...
... ## Insert magic here
elif isinstance(idx, str):
## idx == 'A0' | 'Z99' | 'C8' ...
... ## Insert magic here
else:
raise TypeError("What is this crap!?: ", repr(idx))
def __index__(self):
return self.idx
def __iter__(self):
yield from ... ## insert magic here
def __int__(self):
## not sure if I should implement int(self)..?
## I don't want Python to throw exceptions when I treat
## instances as normal ints (ie: not __index__), though
return self.idx
def __str__(self):
return ... ## insert magic here
def __repr__(self):
## I <3 Recursion
return "".join(("Idx(", repr(self.idx), ")"))