[Python-checkins] CVS: python/dist/src/Lib/test test_descr.py,1.1.2.34,1.1.2.35

Guido van Rossum gvanrossum@users.sourceforge.net
2001年7月19日 09:25:29 -0700


Update of /cvsroot/python/python/dist/src/Lib/test
In directory usw-pr-cvs1:/tmp/cvs-serv7362
Modified Files:
 Tag: descr-branch
	test_descr.py 
Log Message:
Add a test that checks some fundamental operator overloadings:
getattr, getitem, getslice, and their set- and del- siblings.
Index: test_descr.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/Attic/test_descr.py,v
retrieving revision 1.1.2.34
retrieving revision 1.1.2.35
diff -C2 -r1.1.2.34 -r1.1.2.35
*** test_descr.py	2001年07月14日 01:38:56	1.1.2.34
--- test_descr.py	2001年07月19日 16:25:27	1.1.2.35
***************
*** 743,746 ****
--- 743,803 ----
 verify(X().f() == "A")
 
+ def overloading():
+ if verbose: print "testing operator overloading..."
+ 
+ class B(object):
+ "Intermediate class because object doesn't have a __setattr__"
+ 
+ class C(B):
+ 
+ def __getattr__(self, name):
+ if name == "foo":
+ return ("getattr", name)
+ else:
+ return B.__getattr__(self, name)
+ def __setattr__(self, name, value):
+ if name == "foo":
+ self.setattr = (name, value)
+ else:
+ return B.__setattr__(self, name, value)
+ def __delattr__(self, name):
+ if name == "foo":
+ self.delattr = name
+ else:
+ return B.__delattr__(self, name)
+ 
+ def __getitem__(self, key):
+ return ("getitem", key)
+ def __setitem__(self, key, value):
+ self.setitem = (key, value)
+ def __delitem__(self, key):
+ self.delitem = key
+ 
+ def __getslice__(self, i, j):
+ return ("getslice", i, j)
+ def __setslice__(self, i, j, value):
+ self.setslice = (i, j, value)
+ def __delslice__(self, i, j):
+ self.delslice = (i, j)
+ 
+ a = C()
+ verify(a.foo == ("getattr", "foo"))
+ a.foo = 12
+ verify(a.setattr == ("foo", 12))
+ del a.foo
+ verify(a.delattr == "foo")
+ 
+ verify(a[12] == ("getitem", 12))
+ a[12] = 21
+ verify(a.setitem == (12, 21))
+ del a[12]
+ verify(a.delitem == 12)
+ 
+ verify(a[0:10] == ("getslice", 0, 10))
+ a[0:10] = "foo"
+ verify(a.setslice == (0, 10, "foo"))
+ del a[0:10]
+ verify(a.delslice == (0, 10))
+ 
 def all():
 lists()
***************
*** 768,771 ****
--- 825,829 ----
 newslot()
 altmro()
+ overloading()
 
 all()

AltStyle によって変換されたページ (->オリジナル) /