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 |
---|---|---|
|
instance = MyClass(arg1, arg2) |
|
|
instance = MyClass(arg1, arg2) |
|
|
self == other, self > other, etc. |
Called for any comparison |
|
+self |
Unary plus sign |
|
-self |
Unary minus sign |
|
~self |
Bitwise inversion |
|
x[self] |
Conversion when object is used as index |
|
bool(self) |
Boolean value of the object |
|
self.name # name doesn’t exist |
Accessing nonexistent attribute |
|
self.name = val |
Assigning to an attribute |
|
del self.name |
Deleting an attribute |
|
self.name |
Accessing any attribute |
|
self[key] |
Accessing an item using an index |
|
self[key] = val |
Assigning to an item using an index |
|
del self[key] |
Deleting an item using an index |
|
for x in self |
Iteration |
|
value in self, value not in self |
Membership tests using in |
|
self(args) |
“Calling” an instance |
|
with self as x: |
with statement context managers |
|
with self as x: |
with statement context managers |
|
pickle.dump(pkl_file, self) |
Pickling |
|
data = pickle.load(pkl_file) |
Pickling |