পাইথনে আমি কীভাবে ওভারলোডিং পদ্ধতি ব্যবহার করব?


169

আমি পাইথনে পদ্ধতি ওভারলোডিং বাস্তবায়নের চেষ্টা করছি:

class A:
    def stackoverflow(self):    
        print 'first method'
    def stackoverflow(self, i):
        print 'second method', i

ob=A()
ob.stackoverflow(2)

কিন্তু আউটপুট হয় second method 2; একভাবে:

class A:
    def stackoverflow(self):    
        print 'first method'
    def stackoverflow(self, i):
        print 'second method', i

ob=A()
ob.stackoverflow()

দেয়

Traceback (most recent call last):
  File "my.py", line 9, in <module>
    ob.stackoverflow()
TypeError: stackoverflow() takes exactly 2 arguments (1 given)

আমি এই কাজটি কীভাবে করব?


39
পাইথনে, পদ্ধতিগুলিকে " অ্যাট্রিবিউটস " এর একটি বিশেষ সেট হিসাবে ভাবেন এবং কোনও অবজেক্টের জন্য প্রদত্ত নামের একটিমাত্র " অ্যাট্রিবিউট " (এবং এইভাবে একটি পদ্ধতি) থাকতে পারে। শেষ পদ্ধতিটি আগের কোনও পদ্ধতিকে ওভাররাইট করে। জাভাতে, পদ্ধতিগুলি প্রথম শ্রেণির নাগরিক নয় (তারা "বস্তুর বৈশিষ্ট্য" নয়), বরং "বার্তা প্রেরণ" দ্বারা আহ্বান করা হয়েছে যা নিকটবর্তী ধরণের (যা সেখানে ওভারলোডিং আসে সেখানে ) ভিত্তিতে স্থিতিশীলভাবে সমাধান করা হয় ।

2
আরো দেখুন stackoverflow.com/questions/733264/...
agf


6
এই প্রশ্নের উত্তরের কোনওটি কেন এখনও গৃহীত হয়নি? কেবল আপনার পছন্দসই উত্তরের বামে বর্ণিত চেক চিহ্নটি ক্লিক করুন ...
glglgl

উত্তর:


150

এটি মেথড ওভারলোডিং নয় মেথড ওভাররাইডিং । এবং পাইথনে, আপনি এটি সমস্ত ফাংশনটিতে করেন:

class A:

    def stackoverflow(self, i='some_default_value'):    
        print 'only method'

ob=A()
ob.stackoverflow(2)
ob.stackoverflow()

পাইথনে একই নামের সাথে আপনার দুটি পদ্ধতি থাকতে পারে না - এবং আপনার প্রয়োজন হবে না।

পাইথন টিউটোরিয়ালের ডিফল্ট আর্গুমেন্ট মানগুলির বিভাগটি দেখুন । দেখুন "বিস্ময়ের ন্যূনতম" এবং চপল ডিফল্ট আর্গুমেন্ট এড়াতে একটি সাধারণ ভুল জন্য।

সম্পাদনা করুন : পাইথন ৩.৪-তে নতুন একক প্রেরণ জেনেরিক ফাংশন সম্পর্কিত তথ্যের জন্য পিইপি 443 দেখুন ।


119
এবং আপনার প্রয়োজন হবে না - আইএমএইচও কখনও কখনও পদ্ধতি ওভারলোডিং যেমন সি ++ এর মতো হওয়া খুব সহজ হবে। ঠিক আছে, এটি অন্য নির্মাণের সাহায্যে করা সম্ভব নয় এই অর্থে এটি 'প্রয়োজনীয়' নয় - তবে এটি কিছু জিনিস সহজ এবং সরল করে তুলবে।
আন্দ্রেয়াস ফ্লোরথ

7
পছন্দ করুন হাঁসের টাইপিং পছন্দ করতে এবং প্রতিটি পদ্ধতি লিখতে শিখুন যাতে এটি কেবল একটি কাজ করে এবং পদ্ধতির ওভারলোডিংয়ের কোনও প্রয়োজন নেই।
agf

4
ধরা পড়ার আগে আমাকে "এড়াতে সাধারণ ভুল" সম্পর্কে পড়ার জন্য +1
এমডিপআপ

43
আমি কিছুটা দ্বিমত পোষণ করতে চাই;) ... ওভারলোডিং প্রায়শই কোড ক্লিনার করে দেয়, কারণ আপনি বিভিন্ন ক্ষেত্রে পরিচালনা করতে খুব বেশি if-অন্য বিবৃতি দিয়ে পদ্ধতিটি প্যাক করেন না। এক অর্থে কার্যকরী ভাষার পুরো স্বরূপ একই ধরণের ধারণাটি যুক্তি-প্যাটার্ন-ম্যাচিং ব্যবহার করে। যার অর্থ আপনার কাছে আরও বৃহত্তর ক্লিনার পদ্ধতি থাকবে .. দৈত্য অপঠনযোগ্য পদ্ধতির চেয়ে।
স্টেন

2
@ user1019129 পাইথন ৩.৪-এ যুক্ত হওয়া এবং আমার উত্তরের সাথে সংযুক্ত একক প্রেরণের জেনেরিক ফাংশনগুলির উদ্দেশ্য।
agf

62

আপনি পাইথনলঙ্গুলিটিও ব্যবহার করতে পারেন :

from pythonlangutil.overload import Overload, signature

class A:
    @Overload
    @signature()
    def stackoverflow(self):    
        print 'first method'

    @stackoverflow.overload
    @signature("int")
    def stackoverflow(self, i):
        print 'second method', i

6
আমি মনে করি এটিই প্রশ্নের একমাত্র বৈধ উত্তর। আমি পারলে ডাবল-আপভোট করতাম।
মাইকেল 15

3
এটি ভাল, তবে এটি কোনও শ্রেণীর মধ্যে কেবল পদ্ধতিতে কাঁচা ফাংশনে কাজ করে না।
লেজিট স্ট্যাক

1
@ লেজিটস্ট্যাক এই কার্যকারিতাটি যুক্ত করা যেতে পারে। এটা অসম্ভব।
এহসান কেশভার্জিয়ান

3
@ লেজিটস্ট্যাক আমি গিটহাবে কোডটি আপডেট করেছি, এখন এটি ফাংশনগুলির সাথেও কাজ করে।
এহসান কেশবর্জিয়ান

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

48

পাইথনে, আপনি জিনিসগুলি সেভাবে করেন না। লোকেরা যখন জাভার মতো ভাষায় এটি করে, তারা সাধারণত একটি ডিফল্ট মান চায় (যদি না করে তবে তারা সাধারণত আলাদা নামের একটি পদ্ধতি চায়)। সুতরাং, পাইথনে, আপনার ডিফল্ট মান থাকতে পারে

class A(object):  # Remember the ``object`` bit when working in Python 2.x

    def stackoverflow(self, i=None):
        if i is None:
            print 'first form'
        else:
            print 'second form'

আপনি দেখতে পাচ্ছেন যে, আপনি কেবল ডিফল্ট মান না রেখে পৃথক আচরণ ট্রিগার করতে এটি ব্যবহার করতে পারেন।

>>> ob = A()
>>> ob.stackoverflow()
first form
>>> ob.stackoverflow(2)
second form

2
বেশিরভাগ Noneক্ষেত্রে দরকারী যখন আপনি একটি পরিবর্তনীয় ডিফল্ট মান চান। পৃথক আচরণ পৃথক ফাংশনে থাকতে হবে।
agf

@agf: Noneখাঁটি ডিফল্ট মান হিসাবেও কার্যকর হতে পারে।
ক্রিস মরগান

হ্যাঁ, তবে আমি এটিকে সেন্ডিনেল মান হিসাবে ব্যবহার করার বিষয়ে উল্লেখ করছিলাম, যা আপনি নিজের উত্তরে এটি কীভাবে ব্যবহার করেন এবং আমার ধারণাটি পরিষ্কার হয়ে যায়।
agf

আপনি "সাধারণভাবে" বলেন? আপনি কি বোঝাচ্ছেন এটি সবসময় তাই না?
জোয়েল 25'19

24

আপনি পারবেন না, কখনই দরকার নেই এবং সত্যই চান না।

পাইথনে, সমস্ত কিছুই একটি বস্তু। ক্লাসগুলি জিনিস, তাই তারা বস্তু। পদ্ধতিগুলিও তাই।

একটি বস্তু বলা হয় Aযা একটি বর্গ। এটির একটি বৈশিষ্ট্য রয়েছে stackoverflow। এটির মধ্যে কেবল এমন একটি বৈশিষ্ট্য থাকতে পারে।

যখন আপনি লিখতে def stackoverflow(...): ..., কি হবে যে আপনি একটি বস্তুর পদ্ধতি তৈরি, এবং এটি ধার্য হয় stackoverflowএর অ্যাট্রিবিউট A। আপনি যদি দুটি সংজ্ঞা লিখেন, দ্বিতীয়টি প্রথমটি প্রতিস্থাপন করে, অ্যাসাইনমেন্টটি সর্বদা একইভাবে আচরণ করে।

এছাড়াও আপনি এমন কোড লিখতে চান না যা কখনও কখনও ওভারলোডিংয়ের জন্য ব্যবহৃত হয় এমন ধরণের জিনিসগুলির ওয়াইল্ডার করে does ভাষা এইভাবে কাজ করে না।

পরিবর্তে, (যেহেতু আপনি কি ফাংশন পরামিতি জন্য ধরনের নির্দিষ্ট না যা সামান্য জ্ঞান করে তোলে) জিনিস প্রতিটি ধরনের দেওয়া যেতে পারে জন্য পৃথক ফাংশন নির্ধারণ করতে চেষ্টা স্টপ কি জিনিস সম্পর্কে উদ্বেজক হয় এবং তারা কি করতে পারবে সে সম্পর্কে চিন্তা শুরু করতে

আপনি কেবল টিপল বনাম একটি তালিকা পরিচালনা করতে একটি পৃথক লিখতে পারবেন না, তবে এটি চান বা প্রয়োজনও নয়

আপনি যা করেন তা হ'ল এগুলি উভয়ই হ'ল উদাহরণস্বরূপ, পুনরাবৃত্ত (যেমন আপনি লিখতে পারেন for element in container:) take (এগুলি যে উত্তরাধিকারের সাথে সরাসরি সম্পর্কিত নয় তা অপ্রাসঙ্গিক))


6
টিবিএইচ, আমি "কখনই দরকার নেই" এর সাথে আরও যত্নশীল হব। এটি এমন কোনও বিষয় যা কোনও বাস্তব বিশ্বের প্রতিটি বৈশিষ্ট্য এবং সম্পূর্ণ প্রোগ্রামিং ভাষার টিউরিংয়ের উপর ট্যাগ করা যেতে পারে এবং তাই এটি কোনও বৈধ যুক্তি নয়। কে দরকার জেনারেটর? কে প্রয়োজন শ্রেণীর? প্রোগ্রামিং ল্যাঙ্গুয়েজগুলি আরও কংক্রিটের জন্য কেবল সিনট্যাকটিক চিনি।
সেবাস্তিয়ান মাচ

6
সম্পূর্ণ অসমত। এটি হতে পারে যে আপনার "কখনই প্রয়োজন হয় নি" বা "কখনই চাননি", তবে পর্যাপ্ত অ্যাপ্লিকেশন রয়েছে যেখানে আপনি নিখুঁতভাবে চান। উদাহরণস্বরূপ আপনার প্রোগ্রামটি জঞ্জাল না করে পাইথন এবং নম্পরায় অ্যারে উভয়ই হ্যান্ডল করে এমন একটি প্রোগ্রাম লেখার চেষ্টা করুন ...
এলমার জান্ডার

1
মাসির উত্তরের ভিত্তিতে, আমি বলব যে "আপনি পারবেন না" এখন ভুল এবং অপ্রচলিত। @overloadসাজসজ্জার অস্তিত্বের ভিত্তিতে , আমি বলতে পারি যে "সত্যই চান না" সর্বোত্তমভাবে বিতর্কিত। পিইপি -3124 থেকে, "... পাইথন কোডটির জন্য প্রাপ্ত আর্গুমেন্টগুলির ধরণের পরীক্ষা করা বর্তমানে একটি সাধারণ অ্যান্টি-প্যাটার্ন ... এটির জন্য 'সুস্পষ্ট উপায়' টাইপ পরিদর্শন দ্বারা, তবে এটি ভঙ্গুর এবং এতে বন্ধ রয়েছে সম্প্রসারণ ... "সুতরাং মনে হচ্ছে যথেষ্ট লোকেরা চেয়েছিল, এটি পাইথনের অংশ হয়ে গেছে।
মাইক এস

@ মাইকস, মানটি @overloadকেবল টাইপিংয়ের জন্য।
নরফানার

@ নরফানার আপনার প্রতিক্রিয়া আমার মন্তব্যে কীভাবে প্রযোজ্য তা আমি জানি না। আপনি ব্যাখ্যা করতে পারেন?
মাইক এস

16

@Agf সঙ্গে এখন ডান অতীতে উত্তর সঙ্গে ছিল PEP-3124 আমরা আমাদের সিনট্যাক্স চিনি পেয়েছিলাম। দেখুন বিস্তারিত জানার জন্য টাইপ ডকুমেন্টেশন উপর @overloadপ্রসাধক কিন্তু মনে রাখবেন যে এই সত্যিই শুধু সিনট্যাক্স চিনি এবং এই প্রোগ্রামটিতে এই সব মানুষ সম্পর্কে বরাবর তর্ক হয়েছে। ব্যক্তিগতভাবে আমি সম্মত হন যে বিভিন্ন স্বাক্ষর সঙ্গে একাধিক ফাংশন থাকার এটি আরো পাঠযোগ্য তারপর 20+ আর্গুমেন্ট ডিফল্ট মান করার জন্য সেট (সঙ্গে একটি একক ফাংশন থাকার তোলে Noneঅধিকাংশ সময়) এবং তারপর অবিরাম ব্যবহার প্রায় বেহালার করা if, elif, elseচেইন খুঁজে বের করতে কি কলকারী আসলে আর্গুমেন্ট সরবরাহের সেটটির সাথে আমাদের ফাংশনটি করতে চায়। পাইথন জেনকে অনুসরণ করে এটি দীর্ঘ সময় ধরে ছিল

কদর্য চেয়ে সুন্দর।

এবং যুক্তিযুক্তভাবে

সহজ জটিল চেয়ে ভাল।

উপরে লিঙ্কযুক্ত সরকারী পাইথন ডকুমেন্টেশন থেকে সরাসরি:

from typing import overload
@overload
def process(response: None) -> None:
    ...
@overload
def process(response: int) -> Tuple[int, str]:
    ...
@overload
def process(response: bytes) -> str:
    ...
def process(response):
    <actual implementation>

আমি ঠিক কী খুঁজছিলাম, নিজের ওভারলোডিং
ডেকরেটার

2
বিটিডব্লিউ: যে কেউ কেন এটি কাজ করছে না তা ভেবে আমি স্ট্যাকওভারফ্লো / প্রশ্নগুলি / ৫২০৪34771১ / এ আলোচনার দিকে নজর দেওয়ার পরামর্শ দেব - @overloadএড ফাংশনগুলির কোনও বাস্তব বাস্তবায়ন হওয়ার কথা নয়। পাইথন ডকুমেন্টেশনের উদাহরণ থেকে এটি স্পষ্ট নয়।
মাসি

15

আমি পাইথনে আমার উত্তর লিখি 2.২.১।

def overload(*functions):
    return lambda *args, **kwargs: functions[len(args)](*args, **kwargs)

কিভাবে এটা কাজ করে:

  1. overloadযেকোন পরিমাণ কলযোগ্য গ্রহণ করে এবং এগুলিকে টিপলে সংরক্ষণ করে functions, তারপরে ল্যাম্বদা ফেরত দেয়।
  2. ল্যাম্বদা কোনও পরিমাণ আর্গুমেন্ট নেয়, তারপরে functions[number_of_unnamed_args_passed]ল্যাম্বডায় প্রেরণ করা আর্গুমেন্টের সাথে কল করা ফাংশন কলিংয়ের ফলাফল প্রদান করে ।

ব্যবহার:

class A:
    stackoverflow=overload(                    \
        None, \ 
        #there is always a self argument, so this should never get called
        lambda self: print('First method'),      \
        lambda self, i: print('Second method', i) \
    )

14

আমি মনে করি আপনি যে শব্দটির সন্ধান করছেন তা হ'ল "ওভারলোডিং"। পাইথনে কোনও পদ্ধতি ওভারলোডিং নেই। আপনি নিম্নলিখিত হিসাবে ডিফল্ট আর্গুমেন্ট ব্যবহার করতে পারেন।

def stackoverflow(self, i=None):
    if i != None:     
        print 'second method', i
    else:
        print 'first method'

আপনি যখন এটি একটি আর্গুমেন্ট পাস করেন এটি প্রথম শর্তের যুক্তি অনুসরণ করবে এবং প্রথম মুদ্রণ বিবৃতি কার্যকর করবে। আপনি যখন এটি কোনও আর্গুমেন্ট পাস করেন না, এটি elseশর্তে যাবে এবং দ্বিতীয় মুদ্রণ বিবৃতি কার্যকর করবে।


13

আমি আমার উত্তর পাইথন ২.7 এ লিখেছি:

পাইথনে, পদ্ধতি ওভারলোডিং সম্ভব নয়; আপনি যদি সত্যিই বিভিন্ন বৈশিষ্ট্য সহ একই ফাংশনটিতে অ্যাক্সেস করতে চান তবে আমি আপনাকে পদ্ধতির ওভাররাইডে যাওয়ার পরামর্শ দিই।

class Base(): # Base class
    '''def add(self,a,b):
        s=a+b
        print s'''

    def add(self,a,b,c):
        self.a=a
        self.b=b
        self.c=c

        sum =a+b+c
        print sum

class Derived(Base): # Derived class
    def add(self,a,b): # overriding method
        sum=a+b
        print sum



add_fun_1=Base() #instance creation for Base class
add_fun_2=Derived()#instance creation for Derived class

add_fun_1.add(4,2,5) # function with 3 arguments
add_fun_2.add(4,2)   # function with 2 arguments

9

পাইথনে, ওভারলোডিং কোনও প্রয়োগিত ধারণা নয়। তবে, আপনি যদি এমন কোনও কেস তৈরির চেষ্টা করছেন যেখানে উদাহরণস্বরূপ, আপনি যদি চান যে একটি প্রাথমিক পাঠক যদি টাইপের একটি আর্গুমেন্ট fooএবং অন্য আরম্ভকারীকে টাইপের আর্গুমেন্টের জন্য পাস করে bar, যেহেতু পাইথনের সমস্ত কিছুই অবজেক্ট হিসাবে পরিচালিত হয়, আপনি পরীক্ষা করতে পারেন পাস করা অবজেক্টের ক্লাসের টাইপের নাম এবং তার উপর ভিত্তি করে শর্তাধীন হ্যান্ডলিং লিখুন।

class A:
   def __init__(self, arg)
      # Get the Argument's class type as a String
      argClass = arg.__class__.__name__

      if argClass == 'foo':
         print 'Arg is of type "foo"'
         ...
      elif argClass == 'bar':
         print 'Arg is of type "bar"'
         ...
      else
         print 'Arg is of a different type'
         ...

এই ধারণাটি প্রয়োজন হিসাবে বিভিন্ন পদ্ধতির মাধ্যমে একাধিক ভিন্ন দৃশ্যে প্রয়োগ করা যেতে পারে।



5

আগ্রহী যে কারও জন্য এই https://github.com/bintoro/overloading.py সবেমাত্র এসেছিল ।

লিঙ্কযুক্ত সংগ্রহস্থলের রিডমি থেকে:

ওভারলোডিং এমন একটি মডিউল যা রানটাইম আর্গুমেন্টগুলির ধরণ এবং সংখ্যার ভিত্তিতে ফাংশন প্রেরণ সরবরাহ করে।

যখন কোনও ওভারলোডেড ফাংশন শুরু করা হয়, তখন প্রেরণকারী সরবরাহ করা যুক্তিগুলি উপলব্ধ ফাংশন স্বাক্ষরের সাথে তুলনা করে এবং বাস্তবায়নটিকে কল করে যা সবচেয়ে নির্ভুল ম্যাচ সরবরাহ করে।

বৈশিষ্ট্য

নিবন্ধকরণ এবং বিশদ সমাধানের বিধিবিধানের ভিত্তিতে ফাংশন বৈধতা রানটাইমের সময় একটি অনন্য, সু-সংজ্ঞায়িত ফলাফলের গ্যারান্টি দেয়। দুর্দান্ত পারফরম্যান্সের জন্য ফাংশন রেজোলিউশন ক্যাশে কার্যকর করে। ফাংশন স্বাক্ষরগুলিতে alচ্ছিক প্যারামিটারগুলি (ডিফল্ট মান) সমর্থন করে। সেরা ম্যাচটি সমাধান করার সময় অবস্থানিক এবং কীওয়ার্ড উভয় যুক্তিই মূল্যায়ন করে। ফ্যালব্যাক ফাংশন এবং ভাগ করা কোড কার্যকর করার জন্য সমর্থন করে। যুক্তি পলিমারফিজম সমর্থন করে Supp শ্রেণীবদ্ধ এবং স্থিতিবিজ্ঞাসহ ক্লাস এবং উত্তরাধিকারকে সমর্থন করে।


3

পাইথন জাভা বা সি ++ এর মতো পদ্ধতি ওভারলোডিং সমর্থন করে না। আমরা পদ্ধতিগুলি ওভারলোড করতে পারি তবে কেবলমাত্র সর্বশেষতম সংজ্ঞায়িত পদ্ধতিটি ব্যবহার করতে পারি।

# First sum method.
# Takes two argument and print their sum
def sum(a, b):
    s = a + b
    print(s)

# Second sum method
# Takes three argument and print their sum
def sum(a, b, c):
    s = a + b + c
    print(s)

# Uncommenting the below line shows an error    
# sum(4, 5)

# This line will call the second sum method
sum(4, 5, 5)

কলিংয়ে বিভিন্ন সংখ্যক আরোগুলি সরবরাহ করতে আমাদের optionচ্ছিক যুক্তি বা * আরগগুলি সরবরাহ করতে হবে।

Https://www.geeksforgeeks.org/python-method-overloading/ থেকে সৌজন্যে


এটি ওভারলোডিং নয়। এটিকে ওভাররাইটিং বলা হয়। পরেরটি পাইথন দ্বারা সমর্থিত। প্রথমটি সজ্জকার দ্বারা প্রয়োগ করা যেতে পারে।
পাইবেলস

2

পাইথন x.x স্ট্যান্ডার্ড টাইপিং লাইব্রেরি অন্তর্ভুক্ত যা @ ওভারলোড ডেকোরেটর ব্যবহারের মাধ্যমে পদ্ধতি ওভারলোডিংয়ের অনুমতি দেয়। দুর্ভাগ্যক্রমে, কোডটি আরও পঠনযোগ্য করার জন্য এটি হ'ল @ ওভারলোড সজ্জিত পদ্ধতিগুলি অ-সজ্জিত পদ্ধতি অনুসরণ করা দরকার যা বিভিন্ন যুক্তি পরিচালনা করে। আরো পাওয়া যাবে এখানে এখানে কিন্তু আপনার উদাহরণস্বরূপ:

from typing import overload
from typing import Any, Optional
class A(object):
    @overload
    def stackoverflow(self) -> None:    
        print('first method')
    @overload
    def stackoverflow(self, i: Any) -> None:
        print('second method', i)
    def stackoverflow(self, i: Optional[Any] = None) -> None:
        if not i:
            print('first method')
        else:
            print('second method', i)

ob=A()
ob.stackoverflow(2)

1
আপনার উত্তরের শেষে "দ্য" আমাকে ভাবতে বাধ্য করে যে আপনি নিজের উত্তরটি লেখেননি। দয়া করে সম্পাদনা এটা সম্পন্ন করার জন্য আপনার উত্তর।
আর্টজম বি

0

ম্যাথমেথড.পি ফাইলে

from multipledispatch import dispatch
@dispatch(int,int)
def Add(a,b):
   return a+b 
@dispatch(int,int,int)  
def Add(a,b,c):
   return a+b+c 
@dispatch(int,int,int,int)    
def Add(a,b,c,d):
   return a+b+c+d

মেইন.পি ফাইলে

import MathMethod as MM 
print(MM.Add(200,1000,1000,200))

আমরা মাল্টিপ্লেডিসপ্যাচ ব্যবহার করে ওভারলোড পদ্ধতিটি করতে পারি


এর জন্য মাল্টিপ্লেডস্প্যাচ প্যাকেজ ( pypi.org/project/m মাল্টিপ্ল্লেডস্প্যাচ ) ব্যবহার করা দরকার , যা পাইথন কোরের অংশ নয়।
অ্যান্টনি

0

পাইথন সঙ্গে @overload প্রসাধক যোগ PEP-3124 পরিবর্তে শুধু মুছে যাওয়ার সঙ্গে কাজ - টাইপ পরিদর্শন মাধ্যমে ওভারলোডিং জন্য অন্বিত চিনি প্রদান।

PEP-3124 থেকে @ ওভারলোডের মাধ্যমে ওভারলোডিংয়ের কোড উদাহরণ

from overloading import overload
from collections import Iterable

def flatten(ob):
    """Flatten an object to its component iterables"""
    yield ob

@overload
def flatten(ob: Iterable):
    for o in ob:
        for ob in flatten(o):
            yield ob

@overload
def flatten(ob: basestring):
    yield ob

@ ওভারলোড-ডেকরেটর দ্বারা রূপান্তরিত হয়েছে:

def flatten(ob):
    if isinstance(ob, basestring) or not isinstance(ob, Iterable):
        yield ob
    else:
        for o in ob:
            for ob in flatten(o):
                yield ob
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.