是的,我也错过了++和 - 功能。 几百万行的c代码在我的老头脑中刻上了那种想法,而不是对抗它......这是我练习的一个类:
pre- and post-increment, pre- and post-decrement, addition,
subtraction, multiplication, division, results assignable
as integer, printable, settable.
这是'tis:
class counter(object):
def __init__(self,v=0):
self.set(v)
def preinc(self):
self.v += 1
return self.v
def predec(self):
self.v -= 1
return self.v
def postinc(self):
self.v += 1
return self.v - 1
def postdec(self):
self.v -= 1
return self.v + 1
def __add__(self,addend):
return self.v + addend
def __sub__(self,subtrahend):
return self.v - subtrahend
def __mul__(self,multiplier):
return self.v * multiplier
def __div__(self,divisor):
return self.v / divisor
def __getitem__(self):
return self.v
def __str__(self):
return str(self.v)
def set(self,v):
if type(v) != int:
v = 0
self.v = v
您可以像这样使用它:
c = counter() # defaults to zero
for listItem in myList: # imaginary task
doSomething(c.postinc(),listItem) # passes c, but becomes c+1
......已经有了c,你可以这样做......
c.set(11)
while c.predec() > 0:
print c
....要不就...
d = counter(11)
while d.predec() > 0:
print d
...并且(重新)分配到整数...
c = counter(100)
d = c + 223 # assignment as integer
c = c + 223 # re-assignment as integer
print type(c),c # 323
...虽然这将维持c作为类型计数器:
c = counter(100)
c.set(c + 223)
print type(c),c # 323
编辑:
然后有一些意想不到的(并且完全不需要的)行为,
c = counter(42)
s = '%s: %d' % ('Expecting 42',c) # but getting non-numeric exception
print s
...因为在该元组内部,getitem()不是使用的,而是将对象的引用传递给格式化函数。 叹。 所以:
c = counter(42)
s = '%s: %d' % ('Expecting 42',c.v) # and getting 42.
print s
...或者,更详细,更明确地说明了我们实际想要发生的事情,尽管在实际形式中以冗长的方式反映(使用c.v)...
c = counter(42)
s = '%s: %d' % ('Expecting 42',c.__getitem__()) # and getting 42.
print s