2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
सामग्रीसूची
1. वस्तु-उन्मुखाः प्रोग्रामिंग-अवधारणाः (OOP) .
१.१ वर्गाः विषयाः च के सन्ति ?
१.३ वर्गानां विषयाणां च सम्बन्धः
३.१ वर्गपरिभाषा तथा उदाहरणीकरणं
7.2 गतिशीलक्रियाणां कृते आत्मनिरीक्षणस्य उपयोगः
वस्तु-उन्मुख प्रोग्रामिंग (OOP) 1.1. कार्यक्रमान् वस्तुसङ्ग्रहेषु व्यवस्थित्य कार्यान्वितं प्रोग्रामिंगप्रतिमानम् अस्ति । वस्तुषु न केवलं दत्तांशः अपितु तस्य दत्तांशस्य परिवर्तनस्य पद्धतयः अपि सन्ति । OOP इत्यस्य मूलसंकल्पनासु वर्गाः, वस्तुः, गुणाः, विधिः च सन्ति ।
- श्रेणी वस्तुनिर्माणार्थं प्रयुक्तः टेम्पलेट् अथवा ब्लूप्रिण्ट् अस्ति । वर्गाः वस्तुनां गुणं व्यवहारं च परिभाषयन्ति ।
- वस्तु वर्गस्य एकः उदाहरणः अस्ति। वस्तुनिर्माणं वर्गाधारितं विशिष्टं उदाहरणं निर्मातुं भवति ।
उदाहरण:
- class Dog:
- # 类的初始化方法
- def __init__(self, name, age):
- self.name = name # 属性
- self.age = age # 属性
-
- # 方法
- def bark(self):
- return f"{self.name} says Woof!"
-
- # 创建对象
- my_dog = Dog("Rex", 5)
- print(my_dog.bark())
पायथन् इत्यस्मिन् वर्गाः उत्तीर्णाः भवन्ति class
कीवर्ड परिभाषा। वर्गे कार्याणि मेथड्स् इति उच्यन्ते चराः च गुणाः इति उच्यन्ते ।वर्गविधयः प्रायः आरभ्यन्तेself
प्रथमः पैरामीटर् इव, उदाहरणं एव प्रतिनिधियति ।
उदाहरण:
- class Cat:
- def __init__(self, name):
- self.name = name
-
- def meow(self):
- return f"{self.name} says Meow!"
-
- # 创建对象
- my_cat = Cat("Whiskers")
- print(my_cat.meow())
वर्गः कस्यचित् वस्तुनः कृते एकः टेम्पलेट् भवति तथा च वस्तुनः संरचनां व्यवहारं च परिभाषयति । वस्तुनि वर्गानां उदाहरणानि सन्ति, प्रत्येकस्य वस्तुनः स्वतन्त्राः गुणाः, विधिः च भवति ।
- class Person:
- def __init__(self, name, age):
- self.name = name
- self.age = age
-
- def greet(self):
- return f"Hello, my name is {self.name} and I am {self.age} years old."
-
- # 创建多个对象
- person1 = Person("Alice", 30)
- person2 = Person("Bob", 25)
-
- print(person1.greet())
- print(person2.greet())
वर्गः कुकीसांच इव भवति, सः कुकी इत्यस्य आकारं परिमाणं च परिभाषयति । वस्तुनि साचे निर्मिताः कंक्रीटकुकीजाः इव भवन्ति प्रत्येकं कुकीजस्य भिन्नाः स्वादाः (गुणाः) भवितुम् अर्हन्ति, परन्तु तेषां आकारः आकारः च (संरचना व्यवहारः च) समानः भवति ।
मूर्त मुख्यविशेषतां गृहीत्वा विवरणानां अवहेलना कृत्वा जटिलवास्तविकसमस्यानां सरलीकरणं निर्दिशति । प्रोग्रामिंग् इत्यत्र अमूर्तता अस्मान् अधिकं संक्षिप्तं, परिपालनीयं च कोडं निर्मातुं साहाय्यं करोति ।
अमूर्तता अप्रधानविवरणानां अवहेलनां कृत्वा वस्तुनः मुख्यविशेषतानां निष्कासनं भवति । अमूर्ततायाः माध्यमेन वयं गौणविशेषताभिः विचलितं विना वस्तुनः मूलकार्यक्षमतायां ध्यानं दातुं शक्नुमः ।
उदाहरण:
- class Animal:
- def __init__(self, name):
- self.name = name
-
- def make_sound(self):
- pass # 抽象方法,不具体实现
-
- class Dog(Animal):
- def make_sound(self):
- return "Woof!"
-
- class Cat(Animal):
- def make_sound(self):
- return "Meow!"
-
- # 创建对象
- dog = Dog("Rex")
- cat = Cat("Whiskers")
-
- print(dog.make_sound())
- print(cat.make_sound())
पायथन् इत्यस्मिन् वयं abstract classes तथा abstract methods इति परिभाषयित्वा abstraction प्राप्तुं शक्नुमः । अमूर्तवर्गाणां उदाहरणं कर्तुं न शक्यते, केवलं उत्तराधिकारः एव । अमूर्तविधयः अमूर्तवर्गे परिभाषिताः सन्ति परन्तु उपवर्गेषु कार्यान्विताः भवन्ति ।
उदाहरण:
- from abc import ABC, abstractmethod
-
- class Vehicle(ABC):
- @abstractmethod
- def start_engine(self):
- pass
-
- class Car(Vehicle):
- def start_engine(self):
- return "Car engine started"
-
- class Motorcycle(Vehicle):
- def start_engine(self):
- return "Motorcycle engine started"
-
- # 创建对象
- car = Car()
- motorcycle = Motorcycle()
-
- print(car.start_engine())
- print(motorcycle.start_engine())
अमूर्तता जटिलचित्रं ज्यामितीयरूपेण न्यूनीकर्तुं इव अस्ति । यथा - विशिष्टस्य बिडालस्य अनेकानि लक्षणानि सन्ति (कोटस्य वर्णः, आकारः, आयुः इत्यादयः), परन्तु वयं केवलं म्याऊ इत्यस्य लक्षणे एव ध्यानं दद्मः ।
वर्गाः उदाहरणानि च ओओपी इत्यस्य आधारः अस्ति । वर्गाः टेम्पलेट् भवन्ति, उदाहरणानि च ठोसवस्तूनि सन्ति । उदाहरणानि वर्गात् निर्मीयन्ते, तेषां गुणाः, विधयः च वर्गेन परिभाषिताः भवन्ति ।
वर्गस्य परिभाषणं, उदाहरणस्य निर्माणं च OOP इत्यस्य मूलभूतकार्यं भवति । वर्गाः गुणाः विधिः च परिभाषयन्ति, उदाहरणानि च वर्गस्य ठोसवस्तूनि सन्ति ।
उदाहरण:
- class Student:
- def __init__(self, name, grade):
- self.name = name
- self.grade = grade
-
- def introduce(self):
- return f"Hi, I am {self.name} and I am in grade {self.grade}."
-
- # 创建实例
- student1 = Student("Alice", 10)
- student2 = Student("Bob", 12)
-
- print(student1.introduce())
- print(student2.introduce())
वर्गस्य गुणाः विषयस्य स्थितिः, विधिः विषयस्य व्यवहारः च ।वर्गगुणाः उत्तीर्णाः भवन्ति__init__
विधिप्रारम्भः, विधिः वर्गे परिभाषितः अस्ति ।
उदाहरण:
- class Book:
- def __init__(self, title, author):
- self.title = title
- self.author = author
-
- def get_info(self):
- return f"'{self.title}' by {self.author}"
-
- # 创建实例
- book = Book("1984", "George Orwell")
- print(book.get_info())
वर्गाः उदाहरणानि च गृहस्य वास्तविकगृहस्य च रेखाचित्रम् इव भवन्ति। रेखाचित्रं (वर्गाः) गृहस्य संरचनां कार्यक्षमतां च परिभाषयन्ति, यदा तु वास्तविकं गृहं (उदाहरणम्) रेखाचित्रानुसारं निर्मितं ठोसवस्तु भवति
कैप्सूलीकरणम् एतत् वर्गस्य अन्तः वस्तुनः स्थितिं (गुणाः) व्यवहारं च (विधयः) गोपयति तथा च अन्तरफलकस्य (विधयः) माध्यमेन बहिः जगतः सह अन्तरक्रियां करोति । एन्कैप्सुलेशन इत्यनेन कोडसुरक्षायां परिपालने च सुधारः भवति ।
Encapsulation OOP इत्यस्य मूलसंकल्पनासु अन्यतमम् अस्ति यत् एतत् वस्तुनः आन्तरिकस्थितिं गोपयित्वा केवलं आवश्यकान् अन्तरफलकान् उजागरयित्वा वस्तुनः दत्तांशस्य रक्षणं करोति । एवं प्रकारेण बाह्यसङ्केतः वस्तुनः आन्तरिकस्थितिं प्रत्यक्षतया प्राप्तुं वा परिवर्तयितुं वा न शक्नोति, तथा च वस्तुना प्रदत्तविधिभिः एव दत्तांशं परिवर्तयितुं शक्नोति
उदाहरण:
- class Account:
- def __init__(self, owner, balance=0):
- self.owner = owner
- self.__balance = balance # 私有属性
-
- def deposit(self, amount):
- if amount > 0:
- self.__balance += amount
- else:
- raise ValueError("Deposit amount must be positive")
-
- def withdraw(self, amount):
- if 0 < amount <= self.__balance:
- self.__balance -= amount
- else:
- raise ValueError("Insufficient funds or invalid amount")
-
- def get_balance(self):
- return self.__balance
-
- # 创建实例
- account = Account("John")
- account.deposit(100)
- print(account.get_balance())
अन्तरफलकं एव एकमात्रं मार्गं यत् वस्तु बहिः जगतः सह अन्तरक्रियां करोति । अन्तरफलकानां माध्यमेन बाह्यसङ्केतः वस्तुनः विधिः आह्वयितुं शक्नोति परन्तु वस्तुनः आन्तरिकस्थितिं प्रत्यक्षतया प्राप्तुं न शक्नोति ।
उदाहरण:
- class Car:
- def __init__(self, model):
- self.model = model
- self.__engine_started = False
-
- def start_engine(self):
- if not self.__engine_started:
- self.__engine_started = True
- return "Engine started"
- else:
- return "Engine is already running"
-
- def stop_engine(self):
- if self.__engine_started:
- self.__engine_started = False
- return "Engine stopped"
- else:
- return "Engine is not running"
-
- # 创建实例
- car = Car("Toyota")
- print(car.start_engine())
- print(car.stop_engine())
पॅकेजिंग् मोबाईलफोनस्य आवरणं इव भवति । मोबाईल-फोनस्य अन्तः परिपथाः घटकाः च (वस्तुनः स्थितिः) आवरणे समाहिताः सन्ति, उपयोक्ता केवलं बटन्-स्क्रीन् (इण्टरफेस्) इत्येतयोः माध्यमेन मोबाईल-फोनेन सह अन्तरक्रियां कर्तुं शक्नोति, परन्तु आन्तरिकघटकैः सह प्रत्यक्षतया सम्पर्कं कर्तुं न शक्नोति
उत्तराधिकारः OOP इत्यस्य अन्यत् मूलसंकल्पना अस्ति, यत् अस्मान् विद्यमानस्य वर्गस्य आधारेण नूतनं वर्गं निर्मातुं शक्नोति नूतनः वर्गः विद्यमानस्य वर्गस्य सर्वाणि गुणाः विधिः च उत्तराधिकारं प्राप्नोति ।
उत्तराधिकारः तदा भवति यदा एकः वर्गः (उपवर्गः) अन्यस्मात् वर्गात् (मातृवर्गः) गुणाः विधिः च प्राप्नोति । उत्तराधिकारस्य माध्यमेन उपवर्गाः मातापितृवर्गस्य कोडस्य पुनः उपयोगं कर्तुं शक्नुवन्ति, नूतनानि गुणाः विधिः च योजयितुं शक्नुवन्ति, अथवा मातापितृवर्गस्य विधिं अधिलिखितुं शक्नुवन्ति ।
उदाहरण:
- class Animal:
- def __init__(self, name):
- self.name = name
-
- def speak(self):
- pass
-
- class Dog(Animal):
- def speak(self):
- return "Woof!"
-
- class Cat(Animal):
- def speak(self):
- return "Meow!"
-
- # 创建实例
- dog = Dog("Rex")
- cat = Cat("Whiskers")
-
- print(dog.speak())
- print(cat.speak())
उपवर्गः मातापितृवर्गस्य विधिं अधिलिखितुं शक्नोति, अर्थात् भिन्नकार्यं प्राप्तुं उपवर्गे मातापितृवर्गस्य समाननाम्ना विधिं परिभाषितुं शक्नोति
उदाहरण:
- class Shape:
- def area(self):
- return 0
-
- class Rectangle(Shape):
- def __init__(self, width, height):
- self.width = width
- self.height = height
-
- def area(self):
- return self.width * self.height
-
- class Circle(Shape):
- def __init__(self, radius):
- self.radius = radius
-
- def area(self):
- return 3.14 * (self.radius ** 2)
-
- # 创建实例
- rectangle = Rectangle(3, 4)
- circle = Circle(5)
-
- print(rectangle.area())
- print(circle.area())
उत्तराधिकारः मातापितृभिः स्वसन्ततिभ्यः दत्तः वंशः इव अस्ति। मातापितरः (मातापितृवर्गः) स्वसन्ततिभ्यः (उपवर्गेभ्यः) स्वगुणाः (गुणाः पद्धतयः च) प्रसारयन्ति, बालकाः न केवलं एतेषां गुणानाम् उपयोगं कर्तुं शक्नुवन्ति, अपितु स्वस्य प्रयत्नेन (नवीनगुणान् पद्धतीश्च योजयित्वा) अधिकं समृद्धाः भवितुम् अर्हन्ति
बहुरूपता एकस्यैव विधिस्य भिन्नविषयेषु भिन्नाः अभिव्यक्तयः भवन्ति इत्यर्थः । बहुरूपता अस्मान् भिन्नकार्यं प्राप्तुं एकस्मिन् अन्तरफलकेन भिन्नवस्तूनाम् विधिं आह्वयितुं शक्नोति ।
बहुरूपता OOP इत्यस्य महत्त्वपूर्णविशेषतासु अन्यतमम् अस्ति यत् एतत् मातापितृवर्गसन्दर्भाणां माध्यमेन उपवर्गस्य वस्तुनः सूचयति, येन एकस्यामेव पद्धतेः भिन्नाः कार्यान्वयनाः भवन्ति । बहुरूपता कोडस्य लचीलापनं, मापनीयतां च वर्धयति ।
उदाहरण:
- class Animal:
- def speak(self):
- pass
-
- class Dog(Animal):
- def speak(self):
- return "Woof!"
-
- class Cat(Animal):
- def speak(self):
- return "Meow!"
-
- def animal_sound(animal):
- print(animal.speak())
-
- # 创建实例
- dog = Dog()
- cat = Cat()
-
- animal_sound(dog)
- animal_sound(cat)
पायथन् मध्ये बहुरूपता प्रायः मेथड् ओवरराइडिंग् तथा मातापितृवर्गसन्दर्भाणां माध्यमेन कार्यान्वितं भवति । मातापितृवर्गसन्दर्भस्य माध्यमेन उपवर्गस्य वस्तुं दर्शयित्वा, भवान् उपवर्गस्य विधिं आह्वयितुं शक्नोति ।
उदाहरण:
- class Shape:
- def draw(self):
- pass
-
- class Rectangle(Shape):
- def draw(self):
- return "Drawing a rectangle"
-
- class Circle(Shape):
- def draw(self):
- return "Drawing a circle"
-
- def draw_shape(shape):
- print(shape.draw())
-
- # 创建实例
- rectangle = Rectangle()
- circle = Circle()
-
- draw_shape(rectangle)
- draw_shape(circle)
बहुरूपता सार्वभौमिकदूरनियन्त्रणवत् अस्ति । टीवी, वातानुकूलकं वा स्टीरियो वा नियन्त्रयति वा, यावत् एतेषु उपकरणेषु तदनुरूपाः अन्तरफलकाः (विधयः) सन्ति, दूरनियन्त्रणं (मातृपितृवर्गसन्दर्भः) समानबटनद्वारा (विधि-आह्वानं) भिन्नानि कार्याणि कार्यान्वितुं शक्नोति
आत्मनिरीक्षणम् वस्तु रनटाइम् इत्यत्र स्वकीयां सूचनां ज्ञातुं शक्नोति इति अर्थः । पायथन् आत्मनिरीक्षणार्थं केचन अन्तःनिर्मितकार्यं प्रदाति, यथाtype()
、id()
、hasattr()
प्रतीक्षतु।
अन्तर्निरीक्षणस्य अर्थः अस्ति यत् कश्चन वस्तु रनटाइम् इत्यत्र स्वस्य सूचनां प्राप्तुं शक्नोति, यथा गुणाः, विधिः इत्यादयः । आत्मनिरीक्षणेन पायथन् कार्यक्रमाः अत्यन्तं गतिशीलाः लचीलाः च भवन्ति ।
उदाहरण:
- class Person:
- def __init__(self, name, age):
- self.name = name
- self.age = age
-
- person = Person("Alice", 30)
-
- # 使用内置函数进行自省
- print(type(person))
- print(hasattr(person, "name"))
- print(getattr(person, "name"))
- setattr(person, "name", "Bob")
- print(person.name)
- delattr(person, "name")
आत्मनिरीक्षणस्य माध्यमेन वयं रनटाइम् इत्यत्र ऑब्जेक्ट्स् इत्यस्य गुणाः मेथड्स् च गतिशीलरूपेण परिवर्तयितुं शक्नुमः, येन प्रोग्राम् अधिकं लचीलं गतिशीलं च भवति ।
उदाहरण:
- class Car:
- def __init__(self, model):
- self.model = model
- self.speed = 0
-
- def accelerate(self):
- self.speed += 5
- return self.speed
-
- car = Car("Toyota")
-
- # 动态操作对象
- if hasattr(car, "accelerate"):
- method = getattr(car, "accelerate")
- print(method())
- print(method())
-
- # 动态设置属性
- setattr(car, "color", "red")
- print(car.color)
आत्मपरीक्षणं दर्पणं पश्यन् इव भवति। दर्पणस्य (अन्तर्निरीक्षणतन्त्रस्य) माध्यमेन जनाः ते कीदृशाः दृश्यन्ते (वस्तूनाम् गुणाः पद्धतयः च) द्रष्टुं शक्नुवन्ति तथा च आवश्यकतानुसारं समायोजनं कर्तुं शक्नुवन्ति (वस्तूनाम् गतिशीलं हेरफेरम्)
स्थिरविधिः तथाclass method वर्गसम्बद्धाः विधिः सन्ति, न तु दृष्टान्तः ।स्थिरविधिप्रयोगः@staticmethod
अलङ्कारकर्ता, वर्गविधिप्रयोगः@classmethod
अलङ्कारकर्ता।
स्थिरविधिः वर्गस्य विधिः अस्ति, परन्तु सः कस्यापि वर्गस्य दृष्टान्तेन सह न बाध्यते । स्थिरविधयः वर्गस्य उदाहरणानि प्राप्तुं न शक्नुवन्ति, न च वर्गस्य स्थितिं परिवर्तयितुं शक्नुवन्ति । तेषां उपयोगः प्रायः किञ्चित् कार्यं कर्तुं भवति यस्य वर्गेन सह किमपि सम्बन्धः नास्ति, परन्तु तार्किकरूपेण वर्गस्य कार्यक्षमतायाः अन्तर्गतः भवति ।
उदाहरण:
- class Math:
- @staticmethod
- def add(a, b):
- return a + b
-
- print(Math.add(5, 3))
वर्गविधयः तादृशाः विधिः सन्ति ये दृष्टान्तस्य अपेक्षया वर्गे बद्धाः भवन्ति ।क्लास मेथड् इत्यस्य प्रथमः आर्गुमेण्ट् क्लास् एव भवति, प्रायः नामकरणं भवतिcls
. वर्गविधयः वर्गस्य अन्येषां च वर्गविधिनां गुणं प्राप्तुं शक्नुवन्ति ।
उदाहरण:
- class Math:
- factor = 2
-
- @classmethod
- def multiply(cls, value):
- return cls.factor * value
-
- print(Math.multiply(5))
पायथन् इत्यस्मिन् वस्तु-उन्मुख-प्रोग्रामिंगस्य सर्वे पक्षाः, यत्र वस्तु-उन्मुख-प्रोग्रामिंगस्य मूलभूत-अवधारणाः, अमूर्ताः, वर्गाः, उदाहरणानि च, एन्कैप्सुलेशन, उत्तराधिकारः, बहुरूपता, आत्मनिरीक्षणं, स्थिर-वर्ग-विधयः च सन्ति
आशासे यत् एषः विस्तृतः ब्लोग् भवन्तं पायथन्-मध्ये वस्तु-उन्मुख-प्रोग्रामिंगं गभीररूपेण अवगन्तुं तथा च एतत् ज्ञानं वास्तविक-प्रकल्पेषु प्रयोक्तुं साहाय्यं कर्तुं शक्नोति । यदि भवतः किमपि प्रश्नं अस्ति अथवा अधिकसहायतायाः आवश्यकता अस्ति तर्हि कृपया मया सह सम्पर्कं कर्तुं निःशङ्कं भवन्तु!