[英]Python __reverse__ magic method
I'm trying this piece of code expecting that it returns a string of text after reversing with [::-1]
but it is not working.我正在尝试这段代码,希望它在用
[::-1]
反转后返回一串文本,但它不起作用。
class meh:
def __init__(self, bla):
self.bla = bla
def __reversed__(self):
return "Reversing!!!! %s" % self.bla[::-1]
a = meh("Reversed successfully!!!!")
print a[::-1]
How to properly call the __reverse__
function?如何正确调用
__reverse__
函数? Example: __gt__
is called with a > 25
, what calls __reverse__
?示例:
__gt__
被称为> 25
,什么叫__reverse__
?
[::-1]
is a slice . [::-1]
是一个切片。 object.__reversed__()
is instead used by thereversed()
function , and is only applicable to sequences (objects that provide both a __len__
and a __getitem__
method). object.__reversed__()
由reversed()
函数使用,并且仅适用于序列(同时提供__len__
和__getitem__
方法的对象)。
If you don't supply __reversed__
, the function uses those __len__
and __getitem__
methods to access indices in reverse.如果您不提供
__reversed__
,该函数将使用这些__len__
和__getitem__
方法来反向访问索引。 __reversed__
must itself return an iterator: __reversed__
本身必须返回一个迭代器:
class Reversable(object):
def __init__(self, seq):
self.seq = seq
def __len__(self):
return len(self.seq)
def __getitem__(self, item):
return self.seq[item]
def __reversed__(self):
for elem in 'Reversing: ' + self.seq[::-1]:
yield elem
Demo:演示:
>>> class Reversable(object):
... def __init__(self, seq):
... self.seq = seq
... def __len__(self):
... return len(self.seq)
... def __getitem__(self, item):
... return self.seq[item]
... def __reversed__(self):
... for elem in 'Reversing: ' + self.seq[::-1]:
... yield elem
...
>>> r = Reversable('Foo bar baz!')
>>> list(r)
['F', 'o', 'o', ' ', 'b', 'a', 'r', ' ', 'b', 'a', 'z', '!']
>>> list(reversed(r))
['R', 'e', 'v', 'e', 'r', 's', 'i', 'n', 'g', ':', ' ', '!', 'z', 'a', 'b', ' ', 'r', 'a', 'b', ' ', 'o', 'o', 'F']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.