Python > Classes: Special Methods
import datetime
class Foo:
def __init__(self, bar):
self.bar = bar
self.wtf = datetime.datetime.now()
def __eq__(self, other):
return self.bar == other.bar
a = Foo(3)
b = Foo(3)
c = Foo(4)
print(a == b)
print(a == c)
True
False
class Person:
def __init__(self, fullname):
self.first, self.last = fullname.split()
def __lt__(self, other):
return self.last < other.last
def __repr__(self):
return "'{0.first} {0.last}'".format(self)
a = [ Person(x) for x in [
'Adam Savage',
'Bob Dylan',
'Charles Manson',
'David Copperfield'
]]
# or: a = map(Person, [...])
for x in sorted(a):
print(x)
'David Copperfield'
'Bob Dylan'
'Charles Manson'
'Adam Savage'
class Exp:
def __init__(self, base=2):
self.base = base
def __call__(self, num):
return self.base**num
if __name__ == "__main__":
dvoj = Exp()
for i in range(10):
print(dvoj(i))
1
2
4
8
16
32
64
128
256
512
import exp
troj = exp.Exp(3)
print(troj(4))
81
class SquareIterator:
def __init__(self, start, stop):
self.index = start
self.stop = stop
def __next__(self):
if self.index > self.stop:
raise StopIteration()
self.index += 1
return (self.index-1)**2
class Squares:
def __init__(self, start=1, stop=10):
self.start = start
self.stop = stop
def __iter__(self):
return SquareIterator(self.start, self.stop)
a = Squares()
for x in a:
print(x)
b = Squares(4, 9)
print()
print(list(zip(b, b)))
1
4
9
16
25
36
49
64
81
100
[(16, 16), (25, 25), (36, 36), (49, 49), (64, 64), (81, 81)]