pythonでのリロード

4296 ワード

いくつかの静的言語では、ほとんどがリロードされた概念が存在します.これは、OOP(オブジェクトに面したプログラミング)において不可欠な行為である.リロードとは、複数の同じ関数名の関数であり、入力されたパラメータの個数、パラメータタイプに応じて異なる機能が実行される.したがって、関数リロードは実質的にプログラミングにおけるパラメータの可変不統一の問題を解決するためである.
pythonでのリロード
pythonでは、重荷の思想を持っているが、重荷の概念がない.だからpythonのような言語は関数のリロードをサポートしていないと言う人もいれば、pythonはリロード機能を持っていると言う人もいます.実際にpythonプログラミングではリロードの目的が欠けていてリロードされていない動作、あるいはpythonはリロードする必要はありません! pythonは動的言語であり、変数タイプを宣言する必要はなく、関数の中で任意のタイプのパラメータを受け入れることができ、パラメータタイプに基づいてリロードをサポートすることはできません.pythonはパラメータのタイプ問題を考慮する必要はありません.これらは関数内部で処理を判断することができ、関数を書く必要はありません.pythonには様々なパラメータがあり、デフォルトのパラメータ/可変パラメータ/可変キーワードパラメータは関数パラメータのパラメータ可変の問題を処理することができます.
python3.4で増加したリロードメカニズム
重荷をしなくても体が苦しくなるならpython 3.4では、リロードを実現するための転送メカニズムが提供されています.
from functools import singledispatch   
@singledispatch 
def function(obj): 
    print('%r'%(obj))
       
@function.register(int) 
def function_int(obj): 
    print('Integer: %d'%(obj)) 
  
@function.register(str) 
def function_int(obj): 
    print('String: %s'%(obj)) 
  
@function.register(list) 
def function_list(obj): 
    print('List: %r'%(obj)) 
  
  
if __name__ == "__main__": 
     function(1) 
     function('hello') 
     function(range(3)) 
     function(object)