Computer in Hindi | Business in Hindi: python
Showing posts with label python. Show all posts
Showing posts with label python. Show all posts

Monday, June 7, 2021

Learn About Python Decorators in hindi

June 07, 2021 0
Learn About Python Decorators in hindi

Decorators in Python in Hindi

मौजूदा कोड में कार्यक्षमता जोड़ने के लिए Decorators in Python नामक एक दिलचस्प विशेषता है।

इसे metaprogramming भी कहा जाता है क्योंकि प्रोग्राम का एक हिस्सा संकलन समय पर प्रोग्राम के दूसरे हिस्से को संशोधित करने का प्रयास करता है।


Prerequisites for learning decorators in python


decorators के बारे में समझने के लिए, हमें पहले पायथन में कुछ बुनियादी बातें जाननी चाहिए।



हमें इस तथ्य से सहज होना चाहिए कि पायथन में सब कुछ (हाँ! यहां तक ​​​​कि कक्षाएं), वस्तुएं हैं। जिन नामों को हम परिभाषित करते हैं वे केवल इन वस्तुओं से बंधे हुए पहचानकर्ता हैं। कार्य कोई अपवाद नहीं हैं, वे वस्तुएं भी हैं (विशेषताओं के साथ)। कई अलग-अलग नाम एक ही फ़ंक्शन ऑब्जेक्ट से बंधे हो सकते हैं।



Example for decorators in Python


def first(msg):
    print(msg)


first("Hello")

second = first
second("Hello")


जब आप कोड चलाते हैं, तो 
first & second दोनों कार्य समान आउटपुट देते हैं। यहां,   first & second नाम एक ही फ़ंक्शन ऑब्जेक्ट को संदर्भित करते हैं।

अब चीजें अजीब होने लगी हैं।

फ़ंक्शन को किसी अन्य फ़ंक्शन के तर्क के रूप में पारित किया जा सकता है।

यदि आपने पायथन में 
map, filter और  reduceजैसे कार्यों का उपयोग किया है, तो आप इसके बारे में पहले से ही जानते हैं।

ऐसे फलन जो अन्य कार्यों को तर्क के रूप में लेते हैं, higher order functions कहलाते हैं। यहाँ इस तरह के एक समारोह का एक उदाहरण है।

def inc(x):
    return x + 1


def dec(x):
    return x - 1


def operate(func, x):
    result = func(x)
    return result

हम फ़ंक्शन को निम्नानुसार आमंत्रित करते हैं।


>>> operate(inc,3)
4
>>> operate(dec,3)
2

इसके अलावा, एक फ़ंक्शन दूसरे फ़ंक्शन को वापस कर सकता है।


def is_called():
    def is_returned():
        print("Hello")
    return is_returned


new = is_called()

# Outputs "Hello"
new()


 

यहाँ, is_returned () एक नेस्टेड फ़ंक्शन है जिसे परिभाषित किया जाता है और हर बार जब हम is_called () कहते हैं, तो उसे लौटा दिया जाता है।


Getting back to Decorators in Python in Hindi

कार्यों और विधियों को कॉल करने योग्य (callable)कहा जाता है क्योंकि उन्हें बुलाया जा सकता है।



वास्तव में, कोई भी वस्तु जो विशेष __call__() विधि को लागू करती है उसे कॉल करने योग्य कहा जाता है। तो, सबसे बुनियादी अर्थों में, एक डेकोरेटर एक कॉल करने योग्य है जो कॉल करने योग्य देता है।



मूल रूप से, एक डेकोरेटर एक फ़ंक्शन लेता है, कुछ कार्यक्षमता जोड़ता है और उसे वापस करता है।


def make_pretty(func):
    def inner():
        print("I got decorated")
        func()
    return inner


def ordinary():
    print("I am ordinary")


 

जब आप शेल में निम्न कोड चलाते हैं,


>>> ordinary()
I am ordinary

>>> # let's decorate this ordinary function
>>> pretty = make_pretty(ordinary)
>>> pretty()
I got decorated
I am ordinary


 

ऊपर दिखाए गए उदाहरण में, make_pretty() एक डेकोरेटर है। असाइनमेंट चरण में


pretty = make_pretty(ordinary)


 ordinary() फ़ंक्शन को सजाया गया और लौटाए गए फ़ंक्शन को सुंदर नाम दिया गया।

हम देख सकते हैं कि decorator function ने मूल फ़ंक्शन में कुछ नई कार्यक्षमता जोड़ी है। यह उपहार पैक करने के समान है। डेकोरेटर एक आवरण के रूप में कार्य करता है। सजाई गई वस्तु की प्रकृति (अंदर वास्तविक उपहार) नहीं बदलती है। लेकिन अब, यह सुंदर लग रहा है (क्योंकि इसे सजाया गया है)।

आम तौर पर, हम एक फ़ंक्शन को सजाते हैं और इसे पुन: असाइन करते हैं,



ordinary = make_pretty(ordinary).

 

यह एक सामान्य निर्माण है और इस कारण से, इसे सरल बनाने के लिए पायथन के पास एक सिंटैक्स है।

हम डेकोरेटर फंक्शन के नाम के साथ @ सिंबल का उपयोग कर सकते हैं और इसे डेकोरेटेड फंक्शन की परिभाषा के ऊपर रख सकते हैं। उदाहरण के लिए,


@make_pretty
def ordinary():
    print("I am ordinary")


के बराबर है

def ordinary():
    print("I am ordinary")
ordinary = make_pretty(ordinary)

 

सज्जाकारों को लागू करने के लिए यह सिर्फ एक वाक्यात्मक चीनी है।

Decorating Functions in Python with Parameters

 

उपरोक्त डेकोरेटर सरल था और यह केवल उन कार्यों के साथ काम करता था जिनमें कोई पैरामीटर नहीं था। क्या होगा यदि हमारे पास ऐसे कार्य हैं जो पैरामीटर में लेते हैं जैसे:


def divide(a, b):
    return a/b


इस फ़ंक्शन के दो पैरामीटर हैं, a और b। हम जानते हैं कि यदि हम b को 0 के रूप में पास करते हैं तो यह एक त्रुटि देगा।


>>> divide(2,5)
0.4
>>> divide(2,0)
Traceback (most recent call last):
...
ZeroDivisionError: division by zero


 

अब इस मामले की जांच के लिए एक डेकोरेटर बनाते हैं जो त्रुटि का कारण बनेगा।


def smart_divide(func):
    def inner(a, b):
        print("I am going to divide", a, "and", b)
        if b == 0:
            print("Whoops! cannot divide")
            return

        return func(a, b)
    return inner


@smart_divide
def divide(a, b):
    print(a/b)


 

त्रुटि की स्थिति उत्पन्न होने पर यह नया कार्यान्वयन कोई नहीं लौटाएगा।


>>> divide(2,5)
I am going to divide 2 and 5
0.4

>>> divide(2,0)
I am going to divide 2 and 0
Whoops! cannot divide


 

इस तरह, हम उन कार्यों को सजा सकते हैं जो पैरामीटर लेते हैं।

एक उत्सुक पर्यवेक्षक यह नोटिस करेगा कि डेकोरेटर के अंदर नेस्टेड
inner() फ़ंक्शन के पैरामीटर उसी तरह के फ़ंक्शन के पैरामीटर हैं जो इसे सजाते हैं। इसे ध्यान में रखते हुए, अब हम सामान्य सज्जाकार बना सकते हैं जो किसी भी संख्या में मापदंडों के साथ काम करते हैं।

पायथन में, यह जादू 
function(*args, **kwargs)के रूप में किया जाता है। इस तरह, args स्थितीय तर्कों का टपल होगा और kwargsकीवर्ड तर्कों का शब्दकोश होगा। ऐसे डेकोरेटर का एक उदाहरण होगा:



def works_for_all(func):
    def inner(*args, **kwargs):
        print("I can decorate any function")
        return func(*args, **kwargs)
    return inner


Chaining Decorators in Python

पायथन में कई डेकोरेटर्स को chained में बांधा जा सकता है।

कहने का तात्पर्य यह है कि एक समारोह को अलग-अलग (या समान) सज्जाकारों के साथ कई बार सजाया जा सकता है। हम केवल डेकोरेटर्स को वांछित फ़ंक्शन के ऊपर रखते हैं।


def star(func):
    def inner(*args, **kwargs):
        print("*" * 30)
        func(*args, **kwargs)
        print("*" * 30)
    return inner


def percent(func):
    def inner(*args, **kwargs):
        print("%" * 30)
        func(*args, **kwargs)
        print("%" * 30)
    return inner


@star
@percent
def printer(msg):
    print(msg)


printer("Hello")

OUTPUT :-
 

decorator in python in hindi
OUTPUT

syntax :-

@star
@percent
def printer(msg):
    print(msg)

 

के बराबर है

def printer(msg):
    print(msg)
printer = star(percent(printer))

 

जिस क्रम में हम डेकोरेटर्स को चेन करते हैं वह मायने रखता है। अगर हमने आदेश को उलट दिया होता,


@percent
@star
def printer(msg):
    print(msg)


OUTPUT :-

:

Python Decorators
Python Decorators

Inheritance in Python in Hindi with it's types

June 07, 2021 0
Inheritance in Python in Hindi with it's types

Inheritance एक class की क्षमता है जो दूसरे वर्ग से गुणों को प्राप्त या प्राप्त कर सकता है। Inheritance के लाभ हैं:
 

  • यह वास्तविक दुनिया के रिश्तों को अच्छी तरह से दर्शाता है।
  • यह एक कोड की पुन: प्रयोज्यता प्रदान करता है। हमें एक ही कोड को बार-बार नहीं लिखना है। साथ ही, यह हमें किसी वर्ग को संशोधित किए बिना और अधिक सुविधाएँ जोड़ने की अनुमति देता है।
  • यह प्रकृति में सकर्मक है, जिसका अर्थ है कि यदि class B किसी अन्य वर्ग A से विरासत में मिलता है, तो B के सभी उपवर्ग स्वतः ही class A से विरासत में मिल जाएंगे।

Example for inheritance in Python

 

# A Python program to demonstrate inheritance 
   
# Base or Super class. Note object in bracket.
# (Generally, object is made ancestor of all classes)
# In Python 3.x "class Person" is 
# equivalent to "class Person(object)"
class Person(object):
       
    # Constructor
    def __init__(self, name):
        self.name = name
   
    # To get name
    def getName(self):
        return self.name
   
    # To check if this person is an employee
    def isEmployee(self):
        return False
   
   
# Inherited or Subclass (Note Person in bracket)
class Employee(Person):
   
    # Here we return true
    def isEmployee(self):
        return True
   
# Driver code
emp = Person("Geek1"# An Object of Person
print(emp.getName(), emp.isEmployee())
   
emp = Employee("Geek2") # An Object of Employee
print(emp.getName(), emp.isEmployee())


What is object class in Hindi?

 

जावा ऑब्जेक्ट क्लास की तरह, पायथन में (संस्करण 3.x से), ऑब्जेक्ट सभी classes की जड़ है।
पायथन 3.x में, "क्लास टेस्ट (ऑब्जेक्ट)" और "क्लास टेस्ट" समान हैं।
पायथन 2.x में, "क्लास टेस्ट (ऑब्जेक्ट)" ऑब्जेक्ट के साथ पैरेंट (नई स्टाइल क्लास कहा जाता है) के साथ एक क्लास बनाता है और “class Test” पुरानी स्टाइल क्लास (ऑब्जेक्ट पैरेंट के बिना) बनाता है। अधिक विवरण के लिए इसे देखें।

Subclassing (Calling constructor of parent class)

एक बाल वर्ग को यह पहचानने की जरूरत है कि कौन सा वर्ग उसका मूल वर्ग है। यह चाइल्ड क्लास की परिभाषा में मूल वर्ग के नाम का उल्लेख करके किया जा सकता है।


उदाहरण: class subclass_name (superclass_name):

'a' वर्ग व्यक्ति के लिए बनाया गया उदाहरण है। यह संदर्भित वर्ग के __init__() को आमंत्रित करता है। आप वर्ग व्यक्ति के डिक्लेरेशन में लिखा हुआ 'ऑब्जेक्ट' देख सकते हैं। 


पायथन में, प्रत्येक वर्ग को 'ऑब्जेक्ट' नामक एक अंतर्निहित मूल वर्ग से विरासत में मिला है। जब हम ऑब्जेक्ट वेरिएबल या क्लास का इंस्टेंस बनाते हैं तो कंस्ट्रक्टर यानी क्लास का '__init__' फंक्शन लागू होता है।



__init__() में परिभाषित वेरिएबल को इंस्टेंस वेरिएबल या ऑब्जेक्ट कहा जाता है। इसलिए, 'नाम' और 'पहचान संख्या' वर्ग व्यक्ति की वस्तुएँ हैं। इसी प्रकार, 'वेतन' और 'पद' वर्ग कर्मचारी की वस्तुएँ हैं। चूँकि वर्ग कर्मचारी को वर्ग व्यक्ति से विरासत में मिला है, इसलिए 'नाम' और 'पहचान संख्या' भी वर्ग कर्मचारी की वस्तुएँ हैं।


यदि आप पैरेंट क्लास के __init__() को इनवॉइस करना भूल जाते हैं तो इसके इंस्टेंस वेरिएबल चाइल्ड क्लास के लिए उपलब्ध नहीं होंगे।

निम्न कोड उसी कारण से एक त्रुटि उत्पन्न करता है।


# Python program to demonstrate error if we
# forget to invoke __init__() of the parent.
  
class A:
      def __init__(self, n = 'Rahul'):
              self.name = n
class B(A):
      def __init__(self, roll):
              self.roll = roll
  
object = B(23)
print (object.name)


 OUTPUT

Traceback (most recent call last):
  File "/home/de4570cca20263ac2c4149f435dba22c.py", line 12, in 
    print (object.name)
AttributeError: 'B' object has no attribute 'name'
 

Different forms of Inheritance in Python in Hindi

1. Single inheritance: जब कोई चाइल्ड क्लास केवल एक पैरेंट क्लास से इनहेरिट करता है, तो इसे सिंगल इनहेरिटेंस कहा जाता है। हमने ऊपर एक उदाहरण देखा।


2. Multiple inheritance: जब कोई चाइल्ड क्लास कई पैरेंट क्लास से इनहेरिट करता है, तो इसे मल्टीपल इनहेरिटेंस कहा जाता है।


जावा के विपरीत और सी ++ की तरह, पायथन multiple inheritance का समर्थन करता है। हम कोष्ठक में सभी मूल वर्गों को अल्पविराम से अलग की गई सूची के रूप में निर्दिष्ट करते हैं।


# Python example to show the working of multiple 
# inheritance
class Base1(object):
    def __init__(self):
        self.str1 = "Geek1"
        print("Base1")
  
class Base2(object):
    def __init__(self):
        self.str2 = "Geek2"        
        print("Base2")
  
class Derived(Base1, Base2):
    def __init__(self):
          
        # Calling constructors of Base1
        # and Base2 classes
        Base1.__init__(self)
        Base2.__init__(self)
        print("Derived")
          
    def printStrs(self):
        print(self.str1, self.str2)
         
  
ob = Derived()
ob.printStrs()


 

3.  Multilevel inheritance: जब हमारे पास एक बच्चे और पोते का रिश्ता (child and grandchild relationship)होता है।

Example for Multilevel inheritance in Python :-


# A Python program to demonstrate inheritance 
  
# Base or Super class. Note object in bracket.
# (Generally, object is made ancestor of all classes)
# In Python 3.x "class Person" is 
# equivalent to "class Person(object)"
class Base(object):
      
    # Constructor
    def __init__(self, name):
        self.name = name
  
    # To get name
    def getName(self):
        return self.name
  
  
# Inherited or Sub class (Note Person in bracket)
class Child(Base):
      
    # Constructor
    def __init__(self, name, age):
        Base.__init__(self, name)
        self.age = age
  
    # To get name
    def getAge(self):
        return self.age
  
# Inherited or Sub class (Note Person in bracket)
class GrandChild(Child):
      
    # Constructor
    def __init__(self, name, age, address):
        Child.__init__(self, name, age)
        self.address = address
  
    # To get address
    def getAddress(self):
        return self.address        
  
# Driver code
g = GrandChild("Geek1", 23, "Noida")  
print(g.getName(), g.getAge(), g.getAddress())

 

4. Hierarchical inheritance एकल आधार से एक से अधिक व्युत्पन्न वर्ग बनाए जाते हैं।



5.Hybrid inheritance: यह फॉर्म इनहेरिटेंस के एक से अधिक रूपों को जोड़ता है। मूल रूप से, यह एक से अधिक प्रकार की विरासत का मिश्रण है।

Private members of parent class
हम हमेशा नहीं चाहते हैं कि पैरेंट क्लास के इंस्टेंस वेरिएबल को चाइल्ड क्लास द्वारा इनहेरिट किया जाए यानी हम पैरेंट क्लास के कुछ इंस्टेंस वेरिएबल्स को प्राइवेट बना सकते हैं, जो चाइल्ड क्लास के लिए उपलब्ध नहीं होंगे।

# Python program to demonstrate private members
# of the parent class
class C(object):
       def __init__(self):
              self.c = 21
  
              # d is private instance variable 
              self.__d = 42    
class D(C):
       def __init__(self):
              self.e = 84
              C.__init__(self)
object1 = D()
  
# produces an error as d is private instance variable
print(object1.d)  


OUTPUT :-

Inheritance in Python in Hindi
Inheritance in Python in Hindi


हम इसके नाम से पहले डबल अंडरस्कोर जोड़कर एक आवृत्ति चर बना सकते हैं। उदाहरण के लिए,

चूँकि 'd' को उन अंडरस्कोर द्वारा निजी बनाया गया है, यह चाइल्ड क्लास 'D' के लिए उपलब्ध नहीं है और इसलिए त्रुटि है।