Skip to content

Commit 1a17967

Browse files
OOPs
1 parent 2186a69 commit 1a17967

6 files changed

+366
-0
lines changed

OOPs/01-FirstClass.py

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class Employee:
2+
def __init__(self, first, last, pay):
3+
self.first = first
4+
self.last = last
5+
self.pay = pay
6+
self.email = first+"."+last+"@company.com"
7+
8+
def fullname(self):
9+
return '{0} {1}'.format(self.first, self.last)
10+
11+
12+
emp_1 = Employee("Pranam", "Thomas", 50000)
13+
emp_2 = Employee("Arshi", "Shiyal", 60000)
14+
15+
16+
# Employee Objects
17+
#print(emp_1)
18+
#print(emp_2)
19+
20+
print(Employee.fullname(emp_1))
21+
print(emp_2.fullname())

OOPs/02-ClassInstanceVariables.py

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
class Employee:
2+
3+
raise_amount = 1.04
4+
num_of_emps = 0
5+
6+
def __init__(self, first, last, pay):
7+
self.first = first
8+
self.last = last
9+
self.pay = pay
10+
self.email = first+"."+last+"@company.com"
11+
Employee.num_of_emps += 1
12+
13+
def fullname(self):
14+
return '{0} {1}'.format(self.first, self.last)
15+
16+
def apply_raise(self):
17+
# we cal also use Employee.raise_amount
18+
self.pay = int(self.pay * self.raise_amount)
19+
20+
21+
emp_1 = Employee("Pranam", "Thomas", 50000)
22+
emp_2 = Employee("Arshi", "Shiyal", 60000)
23+
24+
25+
print(Employee.raise_amount)
26+
print(emp_1.raise_amount)
27+
print(emp_2.raise_amount)
28+
29+
# Namespace
30+
print(emp_1.__dict__)
31+
print(Employee.__dict__)
32+
33+
# Changes reflect to the class and all instances
34+
Employee.raise_amount = 1.05
35+
print(Employee.raise_amount)
36+
print(emp_1.raise_amount)
37+
print(emp_2.raise_amount)
38+
39+
emp_1.raise_amount = 1.06
40+
print(emp_1.__dict__)
41+
print(Employee.raise_amount)
42+
print(emp_1.raise_amount)
43+
print(emp_2.raise_amount)
44+
print(emp_2.__dict__)
45+
46+
# Employee count
47+
print(Employee.num_of_emps)

OOPs/03-StaticAndClassMethods.py

+79
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
import datetime
2+
3+
4+
class Employee:
5+
raise_amount = 1.04
6+
num_of_emps = 0
7+
8+
def __init__(self, first, last, pay):
9+
self.first = first
10+
self.last = last
11+
self.pay = pay
12+
self.email = first+"."+last+"@company.com"
13+
14+
Employee.num_of_emps += 1
15+
16+
def fullname(self):
17+
return '{0} {1}'.format(self.first, self.last)
18+
19+
# regular method
20+
def apply_raise(self):
21+
# we cal also use Employee.raise_amount
22+
self.pay = int(self.pay * self.raise_amount)
23+
24+
@classmethod
25+
def set_raise_amt(cls, amount):
26+
cls.raise_amount = amount
27+
28+
@classmethod
29+
def from_string(cls, emp_str):
30+
first, last, pay = emp_str.split('-')
31+
return cls(first, last, pay)
32+
33+
@staticmethod
34+
def is_workday(day):
35+
if day.weekday() == 5 or day.weekday() == 6:
36+
return False
37+
return True
38+
39+
40+
emp_1 = Employee("Pranam", "Thomas", 50000)
41+
emp_2 = Employee("Arshi", "Shiyal", 60000)
42+
43+
print(Employee.raise_amount)
44+
print(emp_1.raise_amount)
45+
print(emp_2.raise_amount)
46+
47+
Employee.set_raise_amt(1.06)
48+
print(Employee.raise_amount)
49+
print(Employee.__dict__)
50+
print(emp_1.raise_amount)
51+
print(emp_1.__dict__)
52+
print(emp_2.raise_amount)
53+
print(emp_2.__dict__)
54+
55+
print()
56+
emp_str_1 = 'John-Doe-70000'
57+
emp_str_2 = 'Steve-Smith-30000'
58+
emp_str_3 = 'Jane-Doe-90000'
59+
60+
first, last, pay = emp_str_1.split('-')
61+
new_emp_1 = Employee(first, last, pay)
62+
print(new_emp_1.email)
63+
print(new_emp_1.pay)
64+
print()
65+
66+
# class methods as alternate constructor
67+
new_emp_2 = Employee.from_string(emp_str_2)
68+
new_emp_3 = Employee.from_string(emp_str_3)
69+
print(new_emp_2.email)
70+
print(new_emp_2.pay)
71+
print()
72+
print(new_emp_3.email)
73+
print(new_emp_3.pay)
74+
print()
75+
76+
my_date = datetime.date(2016, 7, 10)
77+
print(Employee.is_workday(my_date))
78+
79+

OOPs/04-Inheritance.py

+110
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
class Employee:
2+
raise_amount = 1.04
3+
num_of_emps = 0
4+
5+
def __init__(self, first, last, pay):
6+
self.first = first
7+
self.last = last
8+
self.pay = pay
9+
self.email = first+"."+last+"@company.com"
10+
11+
Employee.num_of_emps += 1
12+
13+
def fullname(self):
14+
return '{0} {1}'.format(self.first, self.last)
15+
16+
def apply_raise(self):
17+
# we cal also use Employee.raise_amount
18+
self.pay = int(self.pay * self.raise_amount)
19+
20+
@classmethod
21+
def set_raise_amt(cls, amount):
22+
cls.raise_amount = amount
23+
24+
@classmethod
25+
def from_string(cls, emp_str):
26+
first, last, pay = emp_str.split('-')
27+
return cls(first, last, pay)
28+
29+
@staticmethod
30+
def is_workday(day):
31+
if day.weekday() == 5 or day.weekday() == 6:
32+
return False
33+
return True
34+
35+
36+
class Developer(Employee):
37+
raise_amount = 1.10
38+
39+
def __init__(self, first, last, pay, prog_lang):
40+
super().__init__(first, last, pay)
41+
# Employee.__init__(self, first, last, pay)
42+
self.prog_lang = prog_lang
43+
44+
45+
class Manager(Employee):
46+
def __init__(self, first, last, pay, employees=None):
47+
super().__init__(first, last, pay)
48+
# Employee.__init__(self, first, last, pay)
49+
if employees is None:
50+
self.employees = []
51+
else:
52+
self.employees = employees
53+
54+
def add_emp(self, emp):
55+
if emp not in self.employees:
56+
self.employees.append(emp)
57+
58+
def remove_emp(self, emp):
59+
if emp in self.employees:
60+
self.employees.remove(emp)
61+
62+
def print_emps(self):
63+
if len(self.employees) == 0:
64+
print("No Employees.")
65+
else:
66+
for emp in self.employees:
67+
print("-->", emp.fullname())
68+
69+
70+
# Before defining the Developer class
71+
dev_1 = Developer("Pranam", "Thomas", 50000, "NULL")
72+
dev_2 = Developer("Arshi", "Shiyal", 60000, "NULL")
73+
# print(dev_1.email)
74+
# print(dev_2.email)
75+
76+
# print(help(Developer))
77+
78+
print(dev_1.pay)
79+
dev_1.apply_raise()
80+
print(dev_1.pay)
81+
print()
82+
83+
dev_3 = Developer("Shyam", "Sundar", 50000, "Python")
84+
dev_4 = Developer("Arun", "Kumar", 60000, "Java")
85+
print(dev_3.email)
86+
print(dev_3.prog_lang)
87+
print(dev_4.email)
88+
print(dev_4.prog_lang)
89+
print()
90+
91+
mgr_1 = Manager("Sue", "Smith", 90000, [dev_1])
92+
print(mgr_1.email)
93+
mgr_1.print_emps()
94+
print()
95+
mgr_1.add_emp(dev_2)
96+
mgr_1.add_emp(dev_3)
97+
mgr_1.print_emps()
98+
print()
99+
mgr_1.remove_emp(dev_2)
100+
mgr_1.print_emps()
101+
102+
print()
103+
print(isinstance(mgr_1, Manager))
104+
print(isinstance(mgr_1, Employee))
105+
print(isinstance(mgr_1, Developer))
106+
107+
print()
108+
print(issubclass(Manager, Employee))
109+
print(issubclass(Developer, Employee))
110+
print(issubclass(Manager, Developer))

OOPs/05-SpecialMethods.py

+61
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
class Employee:
2+
raise_amount = 1.04
3+
num_of_emps = 0
4+
5+
def __init__(self, first, last, pay):
6+
self.first = first
7+
self.last = last
8+
self.pay = pay
9+
self.email = first+"."+last+"@company.com"
10+
11+
Employee.num_of_emps += 1
12+
13+
def fullname(self):
14+
return '{0} {1}'.format(self.first, self.last)
15+
16+
def apply_raise(self):
17+
# we cal also use Employee.raise_amount
18+
self.pay = int(self.pay * self.raise_amount)
19+
20+
def __repr__(self):
21+
'''
22+
Returns unambiguous representation of the object. Used for Debugging & logging.
23+
'''
24+
return "Employee('{0}','{1}',{2})".format(self.first, self.last, self.pay)
25+
26+
def __str__(self):
27+
'''
28+
Returns a more readable form for the end user
29+
'''
30+
return "{0} - {1}".format(self.fullname(), self.email)
31+
32+
def __add__(self, other):
33+
if isinstance(other, Employee):
34+
return self.pay + other.pay
35+
return NotImplemented
36+
37+
def __len__(self):
38+
return len(self.fullname())
39+
40+
emp1 = Employee("Shyam", "Sundar", 50000)
41+
emp2 = Employee("Arun", "Kumar", 60000)
42+
print(emp1) # will call __str__ which will call __repr__ if it is empty
43+
44+
print(repr(emp1))
45+
print(str(emp1))
46+
47+
print(emp2.__repr__())
48+
print(emp2.__str__())
49+
50+
51+
print(1+2)
52+
print(int.__add__(1, 2))
53+
print(str.__add__('a', 'b'))
54+
55+
print(emp1+emp2)
56+
57+
print(len('test'))
58+
print(str.__len__('test'))
59+
60+
print(emp1.fullname())
61+
print(len(emp1))

OOPs/06-PropertyDecorators.py

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
class Employee:
2+
raise_amount = 1.04
3+
num_of_emps = 0
4+
5+
def __init__(self, first, last, pay):
6+
self.first = first
7+
self.last = last
8+
self.pay = pay
9+
Employee.num_of_emps += 1
10+
11+
@property
12+
def email(self):
13+
return '{0}.{1}@company.com'.format(self.first, self.last)
14+
15+
@property
16+
def fullname(self):
17+
return '{0} {1}'.format(self.first, self.last)
18+
19+
@fullname.setter
20+
def fullname(self, name):
21+
first, last = name.split(' ')
22+
self.first = first
23+
self.last = last
24+
25+
@fullname.deleter
26+
def fullname(self):
27+
print('Delete Name!')
28+
self.first = None
29+
self.last = None
30+
31+
def apply_raise(self):
32+
# we cal also use Employee.raise_amount
33+
self.pay = int(self.pay * self.raise_amount)
34+
35+
36+
emp1 = Employee("Shyam", "Sundar", 50000)
37+
emp2 = Employee("Arun", "Kumar", 60000)
38+
39+
emp1.first = 'Jim'
40+
print(emp1.first)
41+
print(emp1.last)
42+
print(emp1.email)
43+
print(emp1.fullname)
44+
45+
emp1.fullname = 'Corey Schafar'
46+
print(emp1.fullname)
47+
del emp1.fullname
48+
print(emp1.fullname)

0 commit comments

Comments
 (0)