-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathOOPs.py
More file actions
160 lines (103 loc) · 2.92 KB
/
OOPs.py
File metadata and controls
160 lines (103 loc) · 2.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
# class Demo:
# # def config():
# # print("Hello my name")
# # config()
# def dhyey():
# return "Hello, dhyey"
# print(dhyey())
# Demo()
# class Com:
# def config(self):
# print("Hello bro")
# Com1 = Com()
# Com2 = Com()
# # Com.config(Com1)
# # Com.config(Com2)
# Com1.config()
# class Addition:
# A=2
# B=1
# def Sum(A,B):
# print(A+B)
# Sum(A,B)
# print(Addition)
# class Dog:
# species = "Canine" # Class attribute
# def __init__(self, name, age):
# self.name = name # Instance attribute
# self.age = age # Instance attribute
# dog1 = Dog("Buddy", 3)
# print(dog1.name)
# print(dog1.age)
# hello = [1,2,3,4,5]
# its = iter(hello)
# print(next(its))
# print(next(its))
# print(its.__next__())
# print(its.__next__())
# print(its.__next__())
"""inheritence"""
# Single Inheritance
# class Dog:
# def __init__(self, name):
# self.name = name
# def display_name(self):
# print(f"Dog's Name: {self.name}")
# class Labrador(Dog): # Single Inheritance
# def sound(self):
# print("Labrador woofs")
# # Multilevel Inheritance
# class GuideDog(Labrador): # Multilevel Inheritance
# def guide(self):
# print(f"{self.name}Guides the way!")
# # # Multiple Inheritance
# class Friendly:
# def greet(self):
# print("Friendly!")
# class GoldenRetriever(Dog, Friendly): # Multiple Inheritance
# def sound(self):
# print("Golden Retriever Barks")
# Example Usage
# lab = Labrador("Buddy")
# lab.display_name()
# lab.sound()
# guide_dog = GuideDog("Max")
# guide_dog.display_name()
# guide_dog.guide()
# retriever = GoldenRetriever("Charlie")
# retriever.display_name()
# retriever.greet()
# retriever.sound()
"""polymorphism"""
# # Parent Class
# class Dog:
# def sound(self):
# print("dog sound") # Default implementation
# # Run-Time Polymorphism: Method Overriding
# class Labrador(Dog):
# def sound(self):
# print("Labrador woofs") # Overriding parent method
# class Beagle(Dog):
# def sound(self):
# print("Beagle Barks") # Overriding parent method
# # Compile-Time Polymorphism: Method Overloading Mimic
# class Calculator:
# def add(self, a, b=0, c=0):
# return a + b + c # Supports multiple ways to call add()
# # Run-Time Polymorphism
# dogs = [Dog(), Labrador(), Beagle()]
# for dog in dogs:
# dog.sound() # Calls the appropriate method based on the object type
# # Compile-Time Polymorphism (Mimicked using default arguments)
# calc = Calculator()
# print(calc.add(5, 10)) # Two arguments
# print(calc.add(5, 10, 15)) # Three arguments
"""Encapsulation"""
class Person:
def __init__(self, name):
self._name = name # Private attribute
def _display(self): # Private method
print("Name:", self._name)
p = Person("Charlie")
print(p._name) # ❌ Error: AttributeError
p._display()