Python OOP
  • Python OOP
  • OOP class তৈরী
  • ক্লাসে প্রপার্টি যোগ করা
  • ক্লাসে মেথড যোগ করা
  • অবজেক্ট তৈরী করা
  • ক্লাস ভ্যারিয়েবল
  • ইন্সটেন্স ভ্যারিয়েবল
  • Self কীওয়ার্ড
  • অবজেক্ট এর প্রপার্টি ভ্যালু পরিবর্তন
  • অবজেক্ট এর প্রপার্টি ডিলেট করা
  • অবজেক্টকে ডিলেট করা
  • অবজেক্ট
    • প্রতিটি অবজেক্ট আলাদা
    • instance method
  • ম্যাজিক মেথড
  • Construction
  • এনক্যাপসুলেশনঃEncapsulation
  • Method
    • type()
    • Static Method
    • Specials Method
      • __str__ ()
      • __add__()
      • __eq()__
  • Inheritance
    • child class তৈরী
    • চাইল্ড অবজেক্ট প্যারেন্ট অবজেক্ট এর উত্তরাধিকার
    • super()কীওয়ার্ড
      • চাইল্ড ক্লাস হতে প্যারেন্ট ক্লাসের প্রপার্টি এক্সেস করা
      • চাইল্ড ক্লাসের নিজস্ব প্রোপার্টি এবং মেথড
    • isinstance()
      • চাইল্ড ক্লাসে প্যারেন্ট ক্লাসের মেথড কল করা
    • issubclass()
    • Method Overriding
    • super().__init__()
  • অ্যাবস্ট্রাকশন (Abstruction)
Powered by GitBook
On this page
  • এবার বেশি প্রাইভেট salary কে এক্সেস নেয়ার চেষ্টা করি
  • Output
  • getter এবং setter

এনক্যাপসুলেশনঃEncapsulation

এনক্যাপসুলেশন অর্থ গোপনীয়তা। অন্য কোন অব্জেক্ট থেকে কোন ক্লাসের ডেটা লুকোনো বা সরাসরি ব্যবহার থেকে বিরত রাখা ই এনক্যাপসুলেশন। অর্থাৎ কোন ক্লাসের ডেটা বা মেথড কে প্রাইভেট করে রাখার প্রক্রিয়া-ই এনক্যাপসুলেশন । প্রাইভেট অ্যাট্রিবিউট ক্লাস নিজে যেকোন সময় এক্সেস করতে পারে তবে অন্য কোন ক্লাস সরাসরি এক্সেস করতে পারেনা বা পরিবর্তন করতে পারে না। এনক্যাপসুলেশন ক্লাসের ডেটার নিরাপত্তা বাড়ায়।

পাইথন ও অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং এর এনক্যাপসুলেশন নীতি ব্যবহার করে। যদিও পাইথনে ডেটা প্রাইভেট করার জন্য কোন প্রাইভেট কি-ওয়ার্ড নেই কিন্তু সিন্ট্যাক্স আছে। যদিও একে কেউ-ই সিন্ট্যাক্স বলা যায় না। সহজ করে বলার জন্য-ই বলা…

· একটি আইডেন্টিফায়ার যদি একটি আন্ডারস্কোর দিয়ে শুরু হয় তার মানে হচ্ছে আইডেন্টিফায়ার টি প্রাইভেট তবে চাইলে সহজেই এক্সেস করা যাবে।

· কোন আইডেন্টিফায়ার যদি দুটি আন্ডারস্কোর দিয়ে শুরু হয় তাহলে আইডেন্টিফায়ার টি প্রাইভেট তবে এক্সেস করা একটু কঠিন।

class Person:
    def __init__(self, name, age,salary):
      self.name = name       # name একটি পাব্লিক ভ্যারিয়েবল
      self._age = age        # _age প্রাইভেট ভ্যারিয়েবল
      self.__salary = salary # __salary আরও বেশি প্রাইভেট ডেটা

person = Person('olee',25,20000)   
print(person.name )  
print(person._age)
#=== Output ===
olee
25

এবার বেশি প্রাইভেট salary কে এক্সেস নেয়ার চেষ্টা করি

class Person:
    def __init__(self, name, age,salary):
      self.name = name       # name একটি পাব্লিক ভ্যারিয়েবল
      self._age = age        # _age প্রাইভেট ভ্যারিয়েবল
      self.__salary = salary # __salary আরও বেশি প্রাইভেট ডেটা

person = Person('olee',25,20000)
person.__salary=215544   
print(person.__salary)

Output

AttributeError: 'Person' object has no attribute '__salary'

__salary এতই প্রাইভেট যে পাইথন আমাদের বলছে যে এ নামে কোন অ্যাট্রিবিউটই নেই। কিন্তু _age তো ঠিকই আউটপুট দেখাচ্ছে। একে তো প্রাইভেট মনে হচ্ছে না। এটি যে প্রাইভেট তা অনুভব করতে পারবে যখন ইন্ট্রারপ্রেটারে _age এক্সেস করতে যাবে।

এই প্রাইভেট অ্যাট্রিবিউট গুলো পরোক্ষ ভাবে এক্সেস বা পরিবর্তন করতে পাইথন getter এবং setter করে।

getter এবং setter

class Person:
    def __init__(self, name, age,salary):
      self.name = name       # name একটি পাব্লিক ভ্যারিয়েবল
      self._age = age        # _age প্রাইভেট ভ্যারিয়েবল
      self.__salary = salary # __salary আরও বেশি প্রাইভেট ডেটা

    def getter(self):
     print(self.__salary)

    def setter(self,salary):
     self.__salary = salary 


person = Person('olee',25,20000)   
person.setter('3000')
person.getter()
#=== Output ===
3000
PreviousConstructionNextMethod

Last updated 2 years ago