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)]