getitem__(self,key):returnself.changed[key]>>>ms=MySetitem()>>>ms['s']='梯阅线条'>>>ms['s']'梯阅线条'>>>classMyStep:def__getitem__(self,i):# for循环迭代时调用getitemprint(i,end = ' ')returnself.data[i]>>>ms=MyStep()>>>ms.data='梯阅线条'>>>ms[]'梯'>>>foritemin...
18 self.data + [x for x in rhs.data 19 if x not in self.data] 20 ) 21 22 def __sub__(self, rhs): 23 return OrderSet( 24 (x for x in self.data if x not in rhs.data) 25 ) 26 27 def __xor__(self, rhs): 28 return (self - rhs) | (rhs - self) 29 30 def _...
2 return math.sqrt(sum(x * x for x in self)) 3 4 def __neg__(self): 5 return Vector(-x for x in self) #为了计算 -v,构建一个新 Vector 实例,把 self 的每个分量都取反 6 7 def __pos__(self): 8 return Vector(self) #为了计算 +v,构建一个新 Vector 实例,传入 self 的各个...
1)重载迭代如for,先_iter_,再尝试__getitem__。 2)重载逻辑判断如if,先__bool__,再__lenth__. 3) 重载成员关系如in,先__contains__,再__iter_,最后才是__getitem__。 4) 重载打印时,先__str__,再__repr__. 5)重载+=,先__iadd_,再__add__. 5、__getattr__会拦截未定义的属性,未定义...
如果重载了这个方法,for循环每次循环时都会调用类的__getitem__方法; >>> class stepper: ... def __getitem__(self, item): ... return self.data[item].upper() ... >>> >>> X = stepper() >>> X.data = 'Guniao' >>> for item in X: ... print(item) ... A N S H E N G...
如果重载了这个方法,for循环每次循环时都会调用类的getitem方法; >>> class stepper: ... def __getitem__(self, item): ... return self.data[item].upper() ... >>> >>> X = stepper() >>> X.data = 'ansheng' >>> for item in X: ...
包含运算 in 直接调用.values属性来“伪实现”这个功能。 def __contains__(self, other): if type(other) is not Node: return other in self.values sub,subs = other.values,self.values if len(sub)>len(subs): return False subs=[subs[i:i+len(sub)] for i in range(len(subs)-len(sub)+...
(instance field)self._cards=[Card(rank,suit)forsuitinself.suitsforrankinself.ranks]def__len__(self):"""实现len()协议"""returnlen(self._cards)def__getitem__(self,position):"""python内置方法, 实现切片的重载即实现切片的协议Arguments:position {tuple}} -- 切片信息"""returnself._cards[...
__getitem__重载了索引取值和分片操作,实际上它也能重载索引的迭代操作。以for为例,它会循环获取一个个的索引并向后偏移,直到超出索引边界抛出IndexError异常而停止。 此外,__getitem__重载使得它可以被迭代,也就是它通过数值索引的方式让这个对象变成可迭代对象,所有迭代工具(比如zip/map/for/in)都可以对这个对象...