- 1 1. ã¯ããã«
- 2 2. Pythonã§ã®ãªãŒããŒããŒãã®3ã€ã®å®çŸæ¹æ³
- 3 3. Pythonã§ã®ãªãŒããŒããŒãå©çšæã®æ³šæç¹
- 4 4. å®è·µçãªæŽ»çšã·ããªãª
- 5 5. ãŸãšã
- 6 6. FAQ
- 6.1 Pythonã§é¢æ°ã®ãªãŒããŒããŒãã¯å¯èœã§ããïŒ
- 6.2 @singledispatchãš@overloadã®éãã¯äœã§ããïŒ
- 6.3 Pythonã§è€æ°ã®åŒæ°ã®åã«åºã¥ããŠåŠçãåå²ãããã«ã¯ïŒ
- 6.4 ãªãŒããŒããŒãã䜿ãã¹ãå Žé¢ã¯ïŒ
- 6.5 ãªãŒããŒããŒããé¿ããã¹ãå Žé¢ã¯ïŒ
- 6.6 ããã©ãŒãã³ã¹ã«åœ±é¿ã¯ãããŸããïŒ
- 6.7 Pythonã§ãªãŒããŒããŒãã䜿ããªã代æ¿ææ³ã¯ãããŸããïŒ
1. ã¯ããã«
Pythonã¯ãã®ç°¡æœãªæ§æãšå€æ§ãªã©ã€ãã©ãªã§åºãå©çšãããããã°ã©ãã³ã°èšèªã§ãããä»ã®èšèªã§äžè¬çãªããªãŒããŒããŒããæ©èœã¯çŽæ¥ãµããŒããããŠããŸããã
ãªãŒããŒããŒããšã¯ãåãååã®é¢æ°ãã¡ãœããããç°ãªãåŒæ°ã®åãæ°ã«å¿ããŠå®è¡å
容ãåãæ¿ããä»çµã¿ã®ããšã§ããJavaãC++ãªã©ã§ã¯äžè¬çã§ãããPythonã®èšèšææ³ã§ã¯ããã®æ©èœãæšæºã§æäŸããŠããŸããã
ããããPythonã«ã¯ãªãŒããŒããŒããšåçã®æ©èœãå®çŸããããã®å·¥å€«ãããã€ãååšããŸããæ¬èšäºã§ã¯ãPythonã§ãªãŒããŒããŒããã©ã®ããã«å®çŸã§ããã®ããå®éã®ã³ãŒãäŸã亀ããªãã詳ãã解説ããŠãããŸãã
Pythonã«ããããªãŒããŒããŒãã®ç¹åŸŽ
Pythonã¯åçåä»ãã®èšèªã§ãããåãé¢æ°ã§ç°ãªãåã®åŒæ°ãåãåãããšã容æã§ãããã®ãããå³å¯ãªãªãŒããŒããŒãããªããŠããæè»ãªã³ãŒãã£ã³ã°ãå¯èœã§ããããšãã°ã以äžã®ãããªã·ã³ãã«ãªå®è£ ãå¯èœã§ãïŒ
def example_function(arg):
if isinstance(arg, int):
print("æŽæ°ãæž¡ãããŸãã:", arg)
elif isinstance(arg, str):
print("æååãæž¡ãããŸãã:", arg)
else:
print("ãã®ä»ã®åãæž¡ãããŸãã:", arg)
ãã®ã³ãŒãã¯ãåŒæ°ã®åãåçã«å€å¥ããŠåŠçãåå²ããŸããããªãŒããŒããŒãã®å³å¯ãªæŠå¿µãšã¯ç°ãªããŸãã
èšäºã®ç®çãšå 容
ãã®èšäºã§ã¯ã以äžã®ãã€ã³ããäžå¿ã«ãPythonã§ãªãŒããŒããŒããå®çŸããããã®å ·äœçãªæ¹æ³ã説æããŸãïŒ
- æšæºã©ã€ãã©ãªã掻çšãããªãŒããŒããŒãã®å®çŸ
- ãµãŒãããŒãã£ã©ã€ãã©ãªã®çŽ¹ä»
- å®è·µçãªãŠãŒã¹ã±ãŒã¹ã®çŽ¹ä»
ãŸããPythonã§ã®ãªãŒããŒããŒãã®å©çšæã«æ³šæãã¹ãç¹ã«ã€ããŠãåãäžããèªè ãé©åãªæ¹æ³ãéžæã§ããããæ¯æŽããŸãã
2. Pythonã§ã®ãªãŒããŒããŒãã®3ã€ã®å®çŸæ¹æ³
Pythonã§ã¯ãä»ã®èšèªã®ãããªãé¢æ°ã®ãªãŒããŒããŒãããçŽæ¥ãµããŒããããŠããªããããç¬èªã®å·¥å€«ãæ±ããããŸããããã§ã¯ãPythonã§ãªãŒããŒããŒããå®çŸãã3ã€ã®ä»£è¡šçãªæ¹æ³ã玹ä»ããŸãã
2.1 @singledispatch
ã䜿ã£ãã·ã³ã°ã«ãã£ã¹ããã
Pythonã®æšæºã©ã€ãã©ãªã«ã¯ãfunctools
ã¢ãžã¥ãŒã«ãæäŸãã@singledispatch
ãã³ã¬ãŒã¿ããããŸãããã®ãã³ã¬ãŒã¿ã䜿çšãããšãåŒæ°ã®åã«åºã¥ããŠç°ãªãåŠçãç°¡åã«å®è£
ã§ããŸãã
åºæ¬çãªäœ¿ãæ¹
以äžã¯@singledispatch
ã®åºæ¬çãªäœ¿çšäŸã§ãïŒ
from functools import singledispatch
@singledispatch
def process(arg):
print("ããã©ã«ãã®åŠç:", arg)
@process.register(int)
def _(arg):
print("æŽæ°ãåŠç:", arg)
@process.register(str)
def _(arg):
print("æååãåŠç:", arg)
# 䜿çšäŸ
process(10) # åºå: æŽæ°ãåŠç: 10
process("ããã«ã¡ã¯") # åºå: æååãåŠç: ããã«ã¡ã¯
process([1, 2, 3]) # åºå: ããã©ã«ãã®åŠç: [1, 2, 3]
@singledispatch
ã¯ç¬¬äžåŒæ°ã®åã«åºã¥ããŠåŠçãåãæ¿ããŸããåãç»é²ããããšã§ãç¹å®ã®åã«å¿ããåŠçãè¿œå ã§ããŸãã
ã¡ãªãããšå¶çŽ
ã¡ãªãã
- æšæºã©ã€ãã©ãªã§æäŸãããŠãããè¿œå ã€ã³ã¹ããŒã«ãäžèŠã
- åããšã«åŠçãåå²ã§ããã³ãŒãã®å¯èªæ§ãåäžã
å¶çŽ
- 第äžåŒæ°ä»¥å€ã®åã«ã¯å¯Ÿå¿ããŠããªãã
- è€æ°ã®åŒæ°ã®åãåºã«åå²ããå Žåã¯é©ããŠããªãã
2.2 åãã³ãã掻çšãã@overload
Pythonã®typing
ã¢ãžã¥ãŒã«ãæäŸãã@overload
ãã³ã¬ãŒã¿ã¯ãéçåãã§ãã¯çšã®ãã³ããèšè¿°ããããã«äœ¿çšãããŸããå®è¡æã«åŠçãåå²ããããã§ã¯ãããŸããããåãã§ãã¯ããŒã«ïŒäŸïŒmypyïŒãšçµã¿åãããŠå©çšã§ããŸãã
åºæ¬çãªäœ¿ãæ¹
以äžã®äŸã§ã¯ã@overload
ãçšããŠé¢æ°ã®åäœãæ確ã«èšè¿°ããŠããŸãïŒ
from typing import overload
@overload
def add(a: int, b: int) -> int: ...
@overload
def add(a: str, b: str) -> str: ...
def add(a, b):
return a + b
# 䜿çšäŸ
print(add(1, 2)) # åºå: 3
print(add("hello", "world")) # åºå: helloworld
@overload
ã䜿ãããšã§ãåŒæ°ã®åãšæ»ãå€ã®åãæ確ã«èšè¿°ã§ããŸãã
ã¡ãªãããšå¶çŽ
ã¡ãªãã
- åå®å šæ§ãé«ããããšãã§ããã
- IDEã®è£å®æ©èœãéç解æããŒã«ãšçžæ§ãè¯ãã
å¶çŽ
- å®è¡æã®åãã§ãã¯ãåå²ã«ã¯äœ¿çšã§ããªãã
- åçãªåã«å¯Ÿå¿ããæè»æ§ã¯äœãã
2.3 ãµãŒãããŒãã£ã©ã€ãã©ãªmultipledispatch
è€æ°ã®åŒæ°ã«åºã¥ããŠåå²ãè¡ãããå Žåãmultipledispatch
ã©ã€ãã©ãªãæçšã§ãããã®ã©ã€ãã©ãªã䜿çšãããšãè€éãªåå²ããžãã¯ãç°¡æœã«èšè¿°ã§ããŸãã
ã€ã³ã¹ããŒã«ãšäœ¿çšäŸ
以äžã®ã³ãã³ãã§ã€ã³ã¹ããŒã«å¯èœã§ãïŒ
pip install multipledispatch
以äžã¯multipledispatch
ã®äœ¿çšäŸã§ãïŒ
from multipledispatch import dispatch
@dispatch(int, int)
def calculate(a, b):
return a + b
@dispatch(float, float)
def calculate(a, b):
return a * b
@dispatch(str, str)
def calculate(a, b):
return f"{a} {b}"
# 䜿çšäŸ
print(calculate(5, 10)) # åºå: 15
print(calculate(2.5, 3.0)) # åºå: 7.5
print(calculate("Hello", "World")) # åºå: Hello World
ã¡ãªãããšå¶çŽ
ã¡ãªãã
- è€æ°ã®åŒæ°ã®åã«åºã¥ããåŠçãç°¡æœã«èšè¿°å¯èœã
- æè»ãªåå²ãå¯èœã
å¶çŽ
- ãµãŒãããŒãã£ã©ã€ãã©ãªã®ãããè¿œå ã®ã€ã³ã¹ããŒã«ãå¿ èŠã
- 䜿çšæã«ã¯äŸåé¢ä¿ãèæ ®ããå¿ èŠãããã
3. Pythonã§ã®ãªãŒããŒããŒãå©çšæã®æ³šæç¹
Pythonã§ãªãŒããŒããŒããå®çŸããæ¹æ³ãç解ãããããããå®éã«æŽ»çšããéã®æ³šæç¹ã«ã€ããŠèããå¿ èŠããããŸããé©åãªäœ¿ãæ¹ãããªããšãã³ãŒãã®å¯èªæ§ãäœäžãããããã°ãé£ãããªãå¯èœæ§ããããŸãã以äžã§ã¯ããªãŒããŒããŒãã䜿çšããéã«æŒãããŠãããããã€ã³ãã玹ä»ããŸãã
3.1 å¯èªæ§ãšã¡ã³ããã³ã¹æ§
ãªãŒããŒããŒããå€çšãããšãã³ãŒããè€éã«ãªãããããä»ã®éçºè ã«ãšã£ãŠèªã¿ã¥ãããã®ã«ãªãå¯èœæ§ããããŸãããã®ããã以äžã®ç¹ã«æ³šæããããšãéèŠã§ãïŒ
- ã³ã¡ã³ããããã¥ã¡ã³ããå
å®ããã
ãªãŒããŒããŒãã®ç®çããåé¢æ°ãã©ã®ãããªæ¡ä»¶ã§äœ¿çšãããã¹ãããæèšããŠãããŸãããã - åœåèŠåãæ確ã«ãã
ç¹ã«@singledispatch
ãmultipledispatch
ã䜿çšããå Žåãé¢æ°åãçµ±äžããããããç»é²ãããåããšã®åŠçå 容ãæ確ã«èšè¿°ããŠãã ããã
äŸ: ã³ã¡ã³ããä»ããã³ãŒã
from functools import singledispatch
@singledispatch
def process(value):
# å€ã«åºã¥ããåŠçãè¡ã
print("ããã©ã«ãã®åŠç:", value)
@process.register(int)
def _(value):
# æŽæ°ã®å Žåã®åŠç
print("æŽæ°ãåŠç:", value)
@process.register(str)
def _(value):
# æååã®å Žåã®åŠç
print("æååãåŠç:", value)
ã³ã¡ã³ããå ããããšã§ãé¢æ°ã®ç®çãæ確ã«ãªããä»è ãç解ããããã³ãŒãã«ãªããŸãã
3.2 ãããã°æã®æ³šæç¹
ãªãŒããŒããŒããå©çšãããšãã©ã®é¢æ°ãå®è¡ãããŠããã®ãåããã«ãããªãå ŽåããããŸããç¹ã«ãåãæ³å®å€ã®ããŒã¿ã§åŒã³åºãããå Žåãæå³ããªãåäœãåŒãèµ·ããããšããããŸãã
解決ç
- ãã¹ãã±ãŒã¹ãå
å®ããã
åãªãŒããŒããŒãã®ã±ãŒã¹ã«ã€ããŠãŠããããã¹ããäœæããæ³å®éãã«åäœããããšã確èªããŸãããã - ãã®ã³ã°ã掻çšãã
åé¢æ°ã®åé ã§ãã°ãèšé²ããããšã§ãã©ã®é¢æ°ãå®è¡ããããã远跡ã§ããŸãã
äŸ: ãã®ã³ã°ãè¿œå ããã³ãŒã
from functools import singledispatch
import logging
logging.basicConfig(level=logging.INFO)
@singledispatch
def process(value):
logging.info(f"ããã©ã«ãã®åŠçãå®è¡ãããŸãã: {value}")
print("ããã©ã«ãã®åŠç:", value)
@process.register(int)
def _(value):
logging.info(f"æŽæ°ã®åŠçãå®è¡ãããŸãã: {value}")
print("æŽæ°ãåŠç:", value)
@process.register(str)
def _(value):
logging.info(f"æååã®åŠçãå®è¡ãããŸãã: {value}")
print("æååãåŠç:", value)
3.3 é床ãªäœ¿çšã®ãªã¹ã¯
ãªãŒããŒããŒãã¯äŸ¿å©ãªæ©èœã§ãããå¿ èŠä»¥äžã«äœ¿çšãããšã³ãŒããè€éåããæå³ããªãåäœãããã©ãŒãã³ã¹ã®äœäžãæãå¯èœæ§ããããŸãã
æšå¥šããã代æ¿æ段
- æ¡ä»¶åå²ã䜿çš
å°èŠæš¡ãªãããžã§ã¯ããåçŽãªã±ãŒã¹ã§ã¯ããªãŒããŒããŒããããif
æãisinstance
ãçšããæ¡ä»¶åå²ãã·ã³ãã«ã§åãããããå ŽåããããŸãã - ãã¶ã€ã³ãã¿ãŒã³ãæ€èš
ç¹å®ã®ç¶æ³ã§ã¯ããªãŒããŒããŒããããæŠç¥ãã¿ãŒã³ããã¡ã¯ããªãã¿ãŒã³ãé©çšããæ¹ãé©åã§ãã
äŸ: æ¡ä»¶åå²ã«ããå®è£
def process(value):
if isinstance(value, int):
print("æŽæ°ãåŠç:", value)
elif isinstance(value, str):
print("æååãåŠç:", value)
else:
print("ãã®ä»ã®åãåŠç:", value)
æ¡ä»¶åå²ã¯åçŽæå¿«ã§ãããå°èŠæš¡ãªã±ãŒã¹ã§ã¯ãããæé©ãªéžæè¢ãšãªããŸãã
3.4 å®è¡æããã©ãŒãã³ã¹ã®èæ ®
ãªãŒããŒããŒãã䜿çšããå ŽåãåŒæ°ã®åãå€å¥ããåŠçãè¿œå ããããããè¥å¹²ã®ãªãŒããŒããããçºçããŸãã倧éã®ããŒã¿ãåŠçããå Žåããªã¢ã«ã¿ã€ã æ§ãæ±ããããå Žåã«ã¯ãããã©ãŒãã³ã¹ãžã®åœ±é¿ãèæ ®ããå¿ èŠããããŸãã
解決ç
- ãããã¡ã€ãªã³ã°ããŒã«ã䜿çšãã
å®è¡æéã枬å®ããããã©ãŒãã³ã¹ã«åé¡ããªãã確èªããŸãã - å¿
èŠãªå Žåã¯ãªãã¡ã¯ã¿ãªã³ã°
ããã©ãŒãã³ã¹ãåé¡ã«ãªãå Žåãããå¹ççãªã¢ã«ãŽãªãºã ãææ³ã«åãæ¿ããããšãæ€èšããŸãã
4. å®è·µçãªæŽ»çšã·ããªãª
Pythonã§ãªãŒããŒããŒããå®çŸããæ¹æ³ãåŠãã åŸã¯ãå®éã®ãŠãŒã¹ã±ãŒã¹ãéããŠãã®å®çšæ§ãç解ããããšãéèŠã§ãããã®ã»ã¯ã·ã§ã³ã§ã¯ããªãŒããŒããŒãã圹ç«ã€å ·äœçãªã·ããªãªãããã€ã玹ä»ããŸãã
4.1 APIã¬ã¹ãã³ã¹ã®åŠç
çŸä»£ã®ã¢ããªã±ãŒã·ã§ã³éçºã§ã¯ãAPIããååŸããããŒã¿ãJSONãXMLãªã©ãç°ãªããã©ãŒãããã§æäŸãããããšããããŸãããªãŒããŒããŒãã掻çšããã°ãããŒã¿åœ¢åŒã«å¿ããŠé©åãªåŠçãè¡ãã³ãŒããç°¡æœã«èšè¿°ã§ããŸãã
䜿çšäŸ: @singledispatch
ãçšããAPIã¬ã¹ãã³ã¹åŠç
from functools import singledispatch
@singledispatch
def process_response(response):
print("æªç¥ã®ã¬ã¹ãã³ã¹åœ¢åŒ:", response)
@process_response.register(dict)
def _(response):
print("JSON圢åŒã®ããŒã¿ãåŠç:", response)
@process_response.register(str)
def _(response):
print("XML圢åŒã®ããŒã¿ãåŠç:", response)
# 䜿çšäŸ
process_response({"key": "value"}) # åºå: JSON圢åŒã®ããŒã¿ãåŠç: {'key': 'value'}
process_response("<response>value</response>") # åºå: XML圢åŒã®ããŒã¿ãåŠç: <response>value</response>
ãã®ããã«ãã¬ã¹ãã³ã¹ã®åœ¢åŒããšã«ç°ãªãåŠçãèšè¿°ããããšã§ãæè»ãã€æ¡åŒµæ§ã®é«ãã³ãŒããå®çŸã§ããŸãã
4.2 ããŒã¿åã«å¿ããèšç®åŠç
ããŒã¿åæãæ©æ¢°åŠç¿ã®åéã§ã¯ãç°ãªãåã®ããŒã¿ã«å¯ŸããŠç°ãªãèšç®ãè¡ãå¿ èŠãããå ŽåããããŸãããªãŒããŒããŒãã掻çšããããšã§ãã³ãŒãã®å¯èªæ§ãšåå©çšæ§ãé«ããããŸãã
䜿çšäŸ: multipledispatch
ãçšããèšç®åŠç
from multipledispatch import dispatch
@dispatch(int, int)
def calculate(a, b):
return a + b
@dispatch(float, float)
def calculate(a, b):
return a * b
@dispatch(str, str)
def calculate(a, b):
return f"{a} {b}"
# 䜿çšäŸ
print(calculate(5, 10)) # åºå: 15
print(calculate(2.5, 3.0)) # åºå: 7.5
print(calculate("Hello", "World")) # åºå: Hello World
ãã®ããã«ãããŒã¿åã«å¿ããŠèšç®åŠçãåãæ¿ããããšã§ãã·ã³ãã«ã§åãããããã³ãŒããå®çŸã§ããŸãã
4.3 ããŒã¿åã«åºã¥ãããã£ã«ã¿ãªã³ã°åŠç
倧èŠæš¡ãªããŒã¿åŠçã§ã¯ãç°ãªãåã®ããŒã¿ããã£ã«ã¿ãªã³ã°ããå¿ èŠãçããå ŽåããããŸãããªãŒããŒããŒãã䜿çšããããšã§ãæ¡ä»¶åå²ãç°¡æœã«èšè¿°ã§ããŸãã
䜿çšäŸ: ãªã¹ãå ã®ããŒã¿åã«åºã¥ããã£ã«ã¿ãªã³ã°
from functools import singledispatch
@singledispatch
def filter_data(data):
return [item for item in data if isinstance(item, object)]
@filter_data.register(list)
def _(data):
return [item for item in data if isinstance(item, int)]
@filter_data.register(dict)
def _(data):
return {k: v for k, v in data.items() if isinstance(v, str)}
# 䜿çšäŸ
print(filter_data([1, "a", 2, "b"])) # åºå: [1, 2]
print(filter_data({"key1": "value1", "key2": 123})) # åºå: {'key1': 'value1'}
ãªã¹ããèŸæžãªã©ã®ç°ãªãããŒã¿åã«å¯ŸããŠãããããç°ãªããã£ã«ã¿ãªã³ã°åŠçãè¡ãããšãã§ããŸãã
4.4 GUIã¢ããªã±ãŒã·ã§ã³ã§ã®ã€ãã³ããã³ããªã³ã°
GUIã¢ããªã±ãŒã·ã§ã³ã§ã¯ããŠãŒã¶ãŒã®æäœïŒã¯ãªãã¯ãããŒããŒãå ¥åãªã©ïŒã«å¿ããåäœãæè»ã«åãæ¿ããå¿ èŠããããŸãããªãŒããŒããŒãã掻çšããããšã§ãã€ãã³ãããšã®åŠçãç°¡æœã«å®è£ ã§ããŸãã
䜿çšäŸ: ã€ãã³ãã¿ã€ãã«å¿ããåŠç
from functools import singledispatch
@singledispatch
def handle_event(event):
print("æªå¯Ÿå¿ã®ã€ãã³ã:", event)
@handle_event.register(str)
def _(event):
print("ãã¿ã³ãã¯ãªãã¯ãããŸãã:", event)
@handle_event.register(int)
def _(event):
print("ããŒãæŒãããŸãã:", event)
# 䜿çšäŸ
handle_event("Button1") # åºå: ãã¿ã³ãã¯ãªãã¯ãããŸãã: Button1
handle_event(13) # åºå: ããŒãæŒãããŸãã: 13
ãã®ã¢ãããŒãã¯ãGUIããŒã«ãããïŒäŸïŒTkinterãPyQtïŒãšçµã¿åãããŠäœ¿çšããããšãã§ããŸãã
4.5 ãŸãšã
ãããã®å®è·µäŸã¯ãPythonã®ãªãŒããŒããŒããå¹æçã«å©çšããããã®åèãšããŠæŽ»çšã§ããŸãããããã®ã·ããªãªã¯ãæè»ãªåŠçã®å®çŸãã³ãŒãã®ç°¡æœåã«åœ¹ç«ã¡ãŸãããã ããå®éã«å°å ¥ããéã«ã¯ãããã©ãŒãã³ã¹ãã¡ã³ããã³ã¹æ§ãèæ ®ããªããé©åã«éžæããŠãã ããã
5. ãŸãšã
Pythonã§ã¯ãä»ã®èšèªã§äžè¬çãªé¢æ°ãªãŒããŒããŒããçŽæ¥ãµããŒããããŠããªããã®ã®ãæšæºã©ã€ãã©ãªããµãŒãããŒãã£ã©ã€ãã©ãªã掻çšããããšã§é¡äŒŒã®æ©èœãå®çŸã§ããŸããæ¬èšäºã§ã¯ã以äžã®ãã€ã³ãã«ã€ããŠè©³ãã解説ããŸããã
äž»ãªãã€ã³ãã®æ¯ãè¿ã
- Pythonã§ã®ãªãŒããŒããŒãã®3ã€ã®å®çŸæ¹æ³
@singledispatch
: æšæºã©ã€ãã©ãªã䜿çšããŠç¬¬äžåŒæ°ã®åã«å¿ããåŠçãå®çŸã@overload
: åãã³ãã䜿çšããŠéçåãã§ãã¯ããµããŒããmultipledispatch
: ãµãŒãããŒãã£ã©ã€ãã©ãªã§è€æ°åŒæ°ã®åã«åºã¥ãåŠçãç°¡æœã«èšè¿°ã
- å©çšæã®æ³šæç¹
- å¯èªæ§ãšã¡ã³ããã³ã¹æ§ã確ä¿ãããããã³ã¡ã³ããããã¥ã¡ã³ããå å®ãããããšã
- é床ãªäœ¿çšãé¿ããã·ã³ãã«ãªæ¡ä»¶åå²ãé©åãªãã¶ã€ã³ãã¿ãŒã³ãæ€èšããããšã
- ãããã°ããã¹ãã±ãŒã¹ã®å å®ã«ãããäºæããªãæåãé²æ¢ã
- å®è·µçãªæŽ»çšã·ããªãª
- APIã¬ã¹ãã³ã¹ã®åŠçãããŒã¿åã«å¿ããèšç®åŠçãªã©ãããŸããŸãªãŠãŒã¹ã±ãŒã¹ã§ãªãŒããŒããŒãã圹ç«ã€å ·äœäŸã玹ä»ã
ãªãŒããŒããŒãã掻çšããéã®æšå¥šäºé
- å®è£
ããåã«ç®çãæ確ã«ãã
ãªãŒããŒããŒãã䜿çšããããšã§ã³ãŒããè€éåããªãããå¥ã®ã·ã³ãã«ãªææ³ã§ä»£æ¿ã§ããªãããæ€èšããŠãã ããã - ããŒã«ã掻çšãã
éç解æããŒã«ïŒäŸïŒmypyïŒããããã¡ã€ãªã³ã°ããŒã«ã䜿çšããããšã§ãåãã§ãã¯ãããã©ãŒãã³ã¹ã®åé¡ãæ©æã«çºèŠã§ããŸãã - ããŒã å
ã§ã®åæ圢æ
ç¹ã«ãµãŒãããŒãã£ã©ã€ãã©ãªãå°å ¥ããå Žåã¯ãããŒã ã§ã®äºååæãåŸãããšãéèŠã§ããéçºç°å¢ãäŸåé¢ä¿ã®ç®¡çã«åœ±é¿ãäžããå¯èœæ§ãããããã§ãã
æåŸã«
Pythonã§ã®ãªãŒããŒããŒãã¯ãæè»ãªã³ãŒãèšèšãå¯èœã«ãã匷åãªããŒã«ã§ãããã ããé©åãªå Žé¢ã§æ£ãã䜿çšããããšãéèŠã§ãããã®èšäºãéããŠãèªè ãPythonã®ãªãŒããŒããŒããå¹æçã«æŽ»çšããããçç£çãªéçºãè¡ããããšãé¡ã£ãŠããŸãã

6. FAQ
ãã®èšäºã§è§£èª¬ããå 容ã«é¢é£ããããããã質åãšãã®åçããŸãšããŸãããPythonã®ãªãŒããŒããŒãã«é¢ããçåç¹ãã¯ãªã¢ã«ããããã«ã圹ç«ãŠãã ããã
Pythonã§é¢æ°ã®ãªãŒããŒããŒãã¯å¯èœã§ããïŒ
åç
Pythonã§ã¯ãä»ã®èšèªã®ããã«æ瀺çãªé¢æ°ã®ãªãŒããŒããŒãïŒåãé¢æ°åã§ç°ãªãåŒæ°åãæ°ãæã€å®çŸ©ïŒãçŽæ¥ãµããŒãããŠããŸããããããã@singledispatch
ãmultipledispatch
ãšãã£ããã³ã¬ãŒã¿ã掻çšããããšã§ãåæ§ã®æ©èœãå®çŸã§ããŸãã
@singledispatch
ãš@overload
ã®éãã¯äœã§ããïŒ
åç
@singledispatch
å®è¡æã«ç¬¬äžåŒæ°ã®åã«å¿ããŠåŠçãåãæ¿ãããã³ã¬ãŒã¿ã§ããPythonã®æšæºã©ã€ãã©ãªfunctools
ã§æäŸãããŠããŸãã@overload
éçåãã§ãã¯ããŒã«ïŒäŸïŒmypyïŒåãã«åãã³ããæäŸããããã®ãã³ã¬ãŒã¿ã§ããå®è¡æã«ã¯åäœã«åœ±é¿ãäžããŸãããPythonã®æšæºã©ã€ãã©ãªtyping
ã§æäŸãããŠããŸãã
Pythonã§è€æ°ã®åŒæ°ã®åã«åºã¥ããŠåŠçãåå²ãããã«ã¯ïŒ
åç
æšæºã©ã€ãã©ãªã§ã¯å¯Ÿå¿ããŠããŸãããããµãŒãããŒãã£ã©ã€ãã©ãªã®multipledispatch
ãå©çšãããšãè€æ°ã®åŒæ°ã®åã«å¿ããåŠçãå®è£
ã§ããŸãã以äžã¯äŸã§ãïŒ
from multipledispatch import dispatch
@dispatch(int, str)
def example_function(a, b):
return f"{a} ãš {b}"
@dispatch(str, str)
def example_function(a, b):
return f"{a} + {b}"
ãªãŒããŒããŒãã䜿ãã¹ãå Žé¢ã¯ïŒ
åç
以äžã®ãããªå Žé¢ã§ãªãŒããŒããŒãã¯æå¹ã§ãïŒ
- ç°ãªãããŒã¿åã«å¿ããŠåŠçãåå²ããå¿
èŠãããå Žå
äŸïŒAPIã¬ã¹ãã³ã¹ãJSON圢åŒãXML圢åŒã§è¿ãããå Žåã - è€æ°ã®ãŠãŒã¹ã±ãŒã¹ãäžã€ã®é¢æ°ã«ãŸãšãããå Žå
äŸïŒæ°å€ãæååã®å ç®åŠçãå ±éåããå Žåã
ãã ããé床ãªäœ¿çšã¯ã³ãŒãã®å¯èªæ§ãã¡ã³ããã³ã¹æ§ãæãªãå¯èœæ§ããããã泚æãå¿ èŠã§ãã
ãªãŒããŒããŒããé¿ããã¹ãå Žé¢ã¯ïŒ
åç
以äžã®å Žåã¯ãªãŒããŒããŒãã®äœ¿çšãé¿ããããšãæ€èšããŠãã ããïŒ
- åŠçãã·ã³ãã«ã§æ¡ä»¶åå²ã§å¯Ÿå¿ã§ããå Žå
äŸïŒif
æãisinstance
ã䜿ãã ãã§ååãªå Žåã - ä»ã®éçºè
ãç解ãã¥ããã³ãŒãã«ãªãå Žå
ããŒã ã§ã®éçºã§ã¯ãã·ã³ãã«ã§æå¿«ãªå®è£ ãæ±ããããŸãã
ããã©ãŒãã³ã¹ã«åœ±é¿ã¯ãããŸããïŒ
åç
ãªãŒããŒããŒããå©çšããéã«ã¯ãåå€å¥ã«äŒŽããªãŒããŒããããçºçããŸããç¹ã«å€§éã®ããŒã¿ãåŠçããå Žåããªã¢ã«ã¿ã€ã æ§ãæ±ããããå Žåã«ã¯ãå®è¡é床ã«åœ±é¿ãäžããå¯èœæ§ããããããäºåã«ãããã¡ã€ãªã³ã°ãè¡ããé©åãªææ³ãéžæããããšããå§ãããŸãã
Pythonã§ãªãŒããŒããŒãã䜿ããªã代æ¿ææ³ã¯ãããŸããïŒ
åç
代æ¿ææ³ãšããŠä»¥äžã®ãããªãã®ããããŸãïŒ
- æ¡ä»¶åå²
if
æã䜿ã£ãŠåŒæ°ã®åãå€å¥ããåŠçãåãæ¿ããã - ãã¶ã€ã³ãã¿ãŒã³
æŠç¥ãã¿ãŒã³ããã¡ã¯ããªãã¿ãŒã³ãçšããŠãæè»ã§æ¡åŒµæ§ã®é«ãèšèšãè¡ãã - ã¯ã©ã¹ã¡ãœããã®ãªãŒããŒã©ã€ã
ç¶æ¿ã掻çšããŠãç°ãªãåã«å¯Ÿå¿ããã¯ã©ã¹ãèšèšããã