Classes#

Creating a class and object#

Example:

 1#!/usr/bin/env python3
 2
 3class MyClass:
 4    a = 42
 5
 6
 7def main():
 8    myobject = MyClass()
 9    print(myboject.a)
10
11
12if __name__ == "__main__":
13    main()

The constructor method#

During the instantiation of a class the constructor method is called to initialize the object. In Python the method name __init__ is reserved for this purpose.

Example:

 1#!/usr/bin/env python3
 2
 3class Person:
 4    def __init__(self, name, age):
 5        self.name = name
 6        self.age = age
 7
 8
 9def main():
10    person1 = Person("John", 42)
11
12    print(person1.name)
13    print(person1.age)
14
15
16if __name__ == "__main__":
17    main()

Define an object method#

Object methods are functions that belong to the object and operation withing the context of the current object.

Example:

 1#!/usr/bin/env python3
 2
 3class Person:
 4    def __init__(self, name, age):
 5        self.name = name
 6        self.age = age
 7
 8    def myfunc(self):
 9        print("My name is " + self.name)
10
11
12def main():
13    person1 = Person("John", 42)
14    person1.myfunc()
15
16
17if __name__ == "__main__":
18    main()

The self parameter#

The self parameter is a reference to the current instance of the class and has been specified in [PEP-8][arguments], but isn’t a reserved keyword. The name of first argument can be anything you want.

Example:

 1#!/usr/bin/env python3
 2
 3class Person:
 4    def __init__(abc, name, age):
 5        abc.name = name
 6        abc.age = age
 7
 8    def myfunc(xyz):
 9        print("My name is " + xyz.name)
10
11
12def main():
13    person1 = Person("John", 42)
14    person1.myfunc()
15
16
17if __name__ == "__main__":
18    main()

Object actions#

Modify an object property

Example:

1person1.age = 40

Delete an object property

Example:

1del person1.age

Delete an object

Example:

1del person1

Inheritance#

Example:

 1#!/usr/bin/env python3
 2
 3class Person:
 4    def __init__(self, name, age):
 5        self.name = name
 6        self.age = age
 7
 8    def myfunc(self):
 9        print("My name is " + self.name)
10
11class Engineer(Person):
12    pass
13
14
15def main():
16    person1 = Person("John", 42)
17    person1.myfunc()
18
19
20if __name__ == "__main__":
21    main()

Example:

 1#!/usr/bin/env python3
 2
 3class Person:
 4    def __init__(self, name, age):
 5        self.name = name
 6        self.age = age
 7
 8    def myfunc(self):
 9        print("My name is " + self.name)
10
11class Engineer(Person):
12    def __init__(self, name, age, field):
13        Person.__init__(name, age)
14        self.field = field
15
16
17def main():
18    engineer1 = Engineer("John", 42, "Electronics")
19    engineer1.myfunc()
20
21
22if __name__ == "__main__":
23    main()

Example:

 1#!/usr/bin/env python3
 2
 3class Person:
 4    def __init__(self, name, age):
 5        self.name = name
 6        self.age = age
 7
 8    def myfunc(self):
 9        print("My name is " + self.name)
10
11class Engineer(Person):
12    def __init__(self, name, age, field):
13        super().__init__(name, age)
14        self.field = field
15
16
17def main():
18    engineer1 = Engineer("John", 42, "Electronics")
19    engineer1.myfunc()
20
21
22if __name__ == "__main__":
23    main()

Magic methods#

Example:

 1#!/usr/bin/env python3
 2
 3class Memory:
 4
 5    def __init__(self, size: int = 65536) -> None:
 6        self.size = size
 7        self.memory = [0] * self.size
 8        for i in range(self.size):
 9            self.memory[i] = 0x00
10
11    def get(self, address: int) -> int:
12        return self.memory[address]
13
14    def set(self, address: int, value: int) -> int:
15        self.memory[address] = value
16        return self.memory[address]
17
18
19def main():
20    memory = Memory()
21    memory.set(1, 2)
22    print(memory.get(1))
23
24if __name__ == "__main__":
25    main()

Example:

 1#!/usr/bin/env python3
 2
 3class Memory:
 4
 5    def __init__(self, size: int = 65536) -> None:
 6        self.size = size
 7        self.memory = [0] * self.size
 8        for i in range(self.size):
 9            self.memory[i] = 0x00
10
11    def __getitem__(self, address: int) -> int:
12        return self.memory[address]
13
14    def __setitem__(self, address: int, value: int) -> int:
15        self.memory[address] = value
16        return self.memory[address]
17
18
19def main():
20    memory = Memory()
21    memory[1] = 2
22
23
24if __name__ == "__main__":
25    main()

Magic Method

When it gets invoked (example)

Explanation

__new__(cls [,...])

instance = MyClass(arg1, arg2)

__new__ is called on instance creation

__init__(self [,...])

instance = MyClass(arg1, arg2)

__init__ is called on instance creation

__cmp__(self, other)

self == other, self > other, etc.

Called for any comparison

__pos__(self)

+self

Unary plus sign

__neg__(self)

-self

Unary minus sign

__invert__(self)

~self

Bitwise inversion

__index__(self)

x[self]

Conversion when object is used as index

__nonzero__(self)

bool(self)

Boolean value of the object

__getattr__(self, name)

self.name # name doesn’t exist

Accessing nonexistent attribute

__setattr__(self, name, val)

self.name = val

Assigning to an attribute

__delattr__(self, name)

del self.name

Deleting an attribute

__getattribute__(self, name)

self.name

Accessing any attribute

__getitem__(self, key)

self[key]

Accessing an item using an index

__setitem__(self, key, val)

self[key] = val

Assigning to an item using an index

__delitem__(self, key)

del self[key]

Deleting an item using an index

__iter__(self)

for x in self

Iteration

__contains__(self, value)

value in self, value not in self

Membership tests using in

__call__(self [,...])

self(args)

“Calling” an instance

__enter__(self)

with self as x:

with statement context managers

__exit__(self, exc, val, trace)

with self as x:

with statement context managers

__getstate__(self)

pickle.dump(pkl_file, self)

Pickling

__setstate__(self)

data = pickle.load(pkl_file)

Pickling