예, ++ 및-기능도 누락되었습니다. 수백만 줄의 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 # <type 'int'> 323
... c를 유형 카운터로 유지하는 동안 :
c = counter(100)
c.set(c + 223)
print type(c),c # <class '__main__.counter'> 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