class NumStr(object): def __init__(self, num=0, string=''): self.__num = num self.__string = string
def __str__(self): return '[%d :: %r]' % (self.__num, self.__string) __repr__ = __str__
def __add__(self, other): # define for s+o if isinstance(other, NumStr): return self.__class__(self.__num + other.__num, self.__string + other.__string) else: raise TypeError, 'Illegal argument type for built-in operation'
def __mul__(self, num): # define for o*n if isinstance(num, int): return self.__class__(self.__num * num, self.__string * num) else: raise TypeError, 'Illegal argument type for built-in operation'
def __nonzero__(self): # False if both are return self.__num or len(self.__string)
def __norm_cval(self, cmpres):# normalize cmp() return cmp(cmpres, 0)
def __cmp__(self, other): # define for cmp() return self.__norm_cval(cmp(self.__num, other.__num)) + self.__norm_cval(cmp(self.__string, other.__string))
a = NumStr(3, 'foo') b = NumStr(3, 'goo') c = NumStr(2, 'foo') d = NumStr() e = NumStr(string='boo') f = NumStr(1) print a print b print c print d print e print f print a < b print b < c print a == a print b * 2 print a * 3 print b + e print e + b if d: 'not false' # also bool(d) if e: 'not false' # also bool(e) print cmp(a,b) print cmp(a,c) print cmp(a,a)
|