ವಿಷಯಕ್ಕೆ ತೆರಳಿ

ಪೈಥಾನ್ OOP: ಕ್ಲಾಸ್ ಮತ್ತು ಆಬ್ಜೆಕ್ಟ್ ಸಂದರ್ಶನ ಪ್ರಶ್ನೆಗಳು

1. ಆಬ್ಜೆಕ್ಟ್-ಓರಿಯೆಂಟೆಡ್ ಪ್ರೋಗ್ರಾಮಿಂಗ್ (OOP) ಎಂದರೇನು?

ಉತ್ತರ: OOP ಎನ್ನುವುದು "ಆಬ್ಜೆಕ್ಟ್‌ಗಳನ್ನು" ಆಧರಿಸಿದ ಒಂದು ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಮಾದರಿ. ಇಲ್ಲಿ, ಡೇಟಾ (ಅಟ್ರಿಬ್ಯೂಟ್ಸ್) ಮತ್ತು ಆ ಡೇಟಾದ ಮೇಲೆ ಕೆಲಸ ಮಾಡುವ ಕೋಡ್ (ಮೆಥಡ್ಸ್) ಅನ್ನು ಒಂದೇ ಯೂನಿಟ್ ಆಗಿ (ಆಬ್ಜೆಕ್ಟ್) ಜೋಡಿಸಲಾಗುತ್ತದೆ. ಇದು ಕೋಡ್ ಅನ್ನು ಹೆಚ್ಚು ಸಂಘಟಿತ, ಪುನರ್ಬಳಕೆ ಮಾಡಬಲ್ಲ ಮತ್ತು ನಿರ್ವಹಿಸಲು ಸುಲಭವಾಗಿಸುತ್ತದೆ.

2. ಕ್ಲಾಸ್ (Class) ಮತ್ತು ಆಬ್ಜೆಕ್ಟ್ (Object) ನಡುವಿನ ವ್ಯತ್ಯಾಸವೇನು?

ಉತ್ತರ:

  • ಕ್ಲಾಸ್ (Class): ಇದು ಒಂದು ಬ್ಲೂಪ್ರಿಂಟ್ ಅಥವಾ ಟೆಂಪ್ಲೇಟ್. ಇದು ಆಬ್ಜೆಕ್ಟ್‌ನ ಗುಣಲಕ್ಷಣಗಳನ್ನು (ಅಟ್ರಿಬ್ಯೂಟ್ಸ್) ಮತ್ತು ನಡವಳಿಕೆಗಳನ್ನು (ಮೆಥಡ್ಸ್) ಡಿಫೈನ್ ಮಾಡುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, Car ಒಂದು ಕ್ಲಾಸ್.
  • ಆಬ್ಜೆಕ್ಟ್ (Object): ಇದು ಕ್ಲಾಸ್‌ನ ಒಂದು ಇನ್‌ಸ್ಟೆನ್ಸ್ (instance) ಅಥವಾ ನೈಜ ರೂಪ. ಕ್ಲಾಸ್ ಎಂಬ ಬ್ಲೂಪ್ರಿಂಟ್ ಬಳಸಿ ರಚಿಸಲಾದ ನಿಜವಾದ ವಸ್ತು. ಉದಾಹರಣೆಗೆ, my_car = Car() ಇಲ್ಲಿ my_car ಒಂದು ಆಬ್ಜೆಕ್ಟ್.

ಸರಳವಾಗಿ ಹೇಳುವುದಾದರೆ: ಕ್ಲಾಸ್ ಒಂದು ಮನೆ ಕಟ್ಟುವ ಪ್ಲಾನ್ ಇದ್ದಂತೆ, ಆಬ್ಜೆಕ್ಟ್ ಆ ಪ್ಲಾನ್ ಬಳಸಿ ಕಟ್ಟಿದ ನಿಜವಾದ ಮನೆ ಇದ್ದಂತೆ.

3. __init__() ಮೆಥಡ್‌ನ ಉಪಯೋಗವೇನು?

ಉತ್ತರ: __init__() ಎನ್ನುವುದು ಒಂದು ವಿಶೇಷ ಮೆಥಡ್, ಇದನ್ನು "ಕನ್‌ಸ್ಟ್ರಕ್ಟರ್" (constructor) ಎಂದೂ ಕರೆಯುತ್ತಾರೆ. ಒಂದು ಕ್ಲಾಸ್‌ನಿಂದ ಹೊಸ ಆಬ್ಜೆಕ್ಟ್ ಅನ್ನು ರಚಿಸಿದಾಗ ಇದು ತಾನಾಗಿಯೇ ಕಾಲ್ ಆಗುತ್ತದೆ. ಇದನ್ನು ಆಬ್ಜೆಕ್ಟ್‌ನ ಅಟ್ರಿಬ್ಯೂಟ್‌ಗಳಿಗೆ ಆರಂಭಿಕ ಮೌಲ್ಯಗಳನ್ನು (initial values) ನೀಡಲು ಬಳಸಲಾಗುತ್ತದೆ.

ಉದಾಹರಣೆ:

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        print("Dog object created!")


my_dog = Dog("Buddy", 3)
print(my_dog.name)  # Buddy

4. self ಕೀವರ್ಡ್‌ನ ಪಾತ್ರವೇನು?

ಉತ್ತರ: self ಕೀವರ್ಡ್ ಕ್ಲಾಸ್‌ನ ಪ್ರಸ್ತುತ ಇನ್‌ಸ್ಟೆನ್ಸ್ (ಆಬ್ಜೆಕ್ಟ್) ಅನ್ನು ಪ್ರತಿನಿಧಿಸುತ್ತದೆ. ಕ್ಲಾಸ್‌ನೊಳಗಿನ ಮೆಥಡ್‌ಗಳು ಮತ್ತು ಅಟ್ರಿಬ್ಯೂಟ್‌ಗಳನ್ನು ಆಕ್ಸೆಸ್ ಮಾಡಲು ಇದನ್ನು ಬಳಸಲಾಗುತ್ತದೆ.

  • ಒಂದು ಮೆಥಡ್ ಅನ್ನು ಕಾಲ್ ಮಾಡಿದಾಗ, ಪೈಥಾನ್ ತಾನಾಗಿಯೇ ಆಬ್ಜೆಕ್ಟ್‌ನ ರೆಫರೆನ್ಸ್ ಅನ್ನು ಮೊದಲ ಆರ್ಗ್ಯುಮೆಂಟ್ ಆಗಿ (self) ಕಳುಹಿಸುತ್ತದೆ.
  • self.attribute_name ಮೂಲಕ ಆಬ್ಜೆಕ್ಟ್‌ನ ಅಟ್ರಿಬ್ಯೂಟ್‌ಗಳನ್ನು ಆಕ್ಸೆಸ್ ಮಾಡಬಹುದು.

ಉದಾಹರಣೆ:

class Person:
    def __init__(self, name):
        self.name = name  # 'self' ಪ್ರಸ್ತುತ ಆಬ್ಜೆಕ್ಟ್ ಅನ್ನು ಸೂಚಿಸುತ್ತದೆ

    def say_hello(self):
        # 'self' ಬಳಸಿ ಅಟ್ರಿಬ್ಯೂಟ್ ಅನ್ನು ಆಕ್ಸೆಸ್ ಮಾಡುವುದು
        print(f"Hello, my name is {self.name}")


p = Person("Alice")
p.say_hello()  # Hello, my name is Alice

5. ಕ್ಲಾಸ್ ಅಟ್ರಿಬ್ಯೂಟ್ (Class Attribute) ಮತ್ತು ಇನ್‌ಸ್ಟೆನ್ಸ್ ಅಟ್ರಿಬ್ಯೂಟ್ (Instance Attribute) ನಡುವಿನ ವ್ಯತ್ಯಾಸವೇನು?

ಉತ್ತರ:

  • ಇನ್‌ಸ್ಟೆನ್ಸ್ ಅಟ್ರಿಬ್ಯೂಟ್:

    • ಇದು ಪ್ರತಿ ಆಬ್ಜೆಕ್ಟ್‌ಗೆ ಪ್ರತ್ಯೇಕವಾಗಿರುತ್ತದೆ.
    • ಇದನ್ನು __init__() ಮೆಥಡ್‌ನೊಳಗೆ self.attribute = value ಎಂದು ಡಿಫೈನ್ ಮಾಡಲಾಗುತ್ತದೆ.
    • ಒಂದು ಆಬ್ಜೆಕ್ಟ್‌ನ ಇನ್‌ಸ್ಟೆನ್ಸ್ ಅಟ್ರಿಬ್ಯೂಟ್ ಬದಲಾದರೆ, ಬೇರೆ ಆಬ್ಜೆಕ್ಟ್‌ಗಳ ಮೇಲೆ ಪರಿಣಾಮ ಬೀರುವುದಿಲ್ಲ.
  • ಕ್ಲಾಸ್ ಅಟ್ರಿಬ್ಯೂಟ್:

    • ಇದು ಆ ಕ್ಲಾಸ್‌ನ ಎಲ್ಲಾ ಆಬ್ಜೆಕ್ಟ್‌ಗಳಿಗೆ ಒಂದೇ ಆಗಿರುತ್ತದೆ (ಶೇರ್ ಆಗಿರುತ್ತದೆ).
    • ಇದನ್ನು ಕ್ಲಾಸ್‌ನೊಳಗೆ, ಆದರೆ ಯಾವುದೇ ಮೆಥಡ್‌ನ ಹೊರಗೆ ಡಿಫೈನ್ ಮಾಡಲಾಗುತ್ತದೆ.
    • ಕ್ಲಾಸ್ ಅಟ್ರಿಬ್ಯೂಟ್ ಬದಲಾದರೆ, ಅದು ಎಲ್ಲಾ ಆಬ್ಜೆಕ್ಟ್‌ಗಳಿಗೂ ಅನ್ವಯಿಸುತ್ತದೆ.

ಉದಾಹರಣೆ:

class Circle:
    pi = 3.14159  # ಕ್ಲಾಸ್ ಅಟ್ರಿಬ್ಯೂಟ್

    def __init__(self, radius):
        self.radius = radius  # ಇನ್‌ಸ್ಟೆನ್ಸ್ ಅಟ್ರಿಬ್ಯೂಟ್


c1 = Circle(5)
c2 = Circle(10)

print(c1.radius, c1.pi)  # 5, 3.14159
print(c2.radius, c2.pi)  # 10, 3.14159

# ಕ್ಲಾಸ್ ಅಟ್ರಿಬ್ಯೂಟ್ ಬದಲಾಯಿಸಿದರೆ
Circle.pi = 3.14
print(c1.pi)  # 3.14
print(c2.pi)  # 3.14