হ্যাঁ, আমি ++ এবং - কার্যকারিতাও মিস করেছি। সি কোডের কয়েক মিলিয়ন লাইন আমার পুরানো মাথায় এই ধরণের চিন্তাভাবনা আঁকিয়েছিল, এবং এটির বিরুদ্ধে লড়াই করার চেয়ে ... এখানে আমি ক্লাস করেছি যা প্রয়োগ করে:
pre- and post-increment, pre- and post-decrement, addition,
subtraction, multiplication, division, results assignable
as integer, printable, settable.
এখানে:
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.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 = 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
... কারণ এই টিপলের অভ্যন্তরে, গেটাইটেম () যা ব্যবহৃত তা নয়, পরিবর্তে অবজেক্টের একটি রেফারেন্স বিন্যাসকরণ ফাংশনে প্রেরণ করা হয়। দীর্ঘশ্বাস. তাই:
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