- 1 1. ã¯ããã«
- 2 2. ãªãŒããŒã©ã€ããšã¯
- 3 3. Pythonã«ããããªãŒããŒã©ã€ãã®å®è£ æ¹æ³
- 4 4. å®è·µïŒPythonãªãŒããŒã©ã€ãã®ã³ãŒãäŸ
- 5 5. ãªãŒããŒã©ã€ãã®æ³šæç¹
- 6 6. ãªãŒããŒããŒããšã®æ¯èŒ
- 7 7. ãŸãšã
- 8 8. FAQïŒãããã質åïŒ
- 8.1 Q1: ãªãŒããŒã©ã€ããšãªãŒããŒããŒãã®äž»ãªéãã¯äœã§ããïŒ
- 8.2 Q2: super()ã¯å¿ ã䜿ãã¹ãã§ããïŒ
- 8.3 Q3: 芪ã¯ã©ã¹ã®ã¡ãœãããå®å šã«ç¡å¹åããã«ã¯ã©ãããã°ããã§ããïŒ
- 8.4 Q4: Pythonã§ãªãŒããŒããŒããå®çŸããæ¹æ³ã¯ãããŸããïŒ
- 8.5 Q5: å€éç¶æ¿æããªãŒããŒã©ã€ããããŸãåäœããŸãããã©ãããã°ããã§ããïŒ
- 8.6 Q6: ãªãŒããŒã©ã€ããšç¶æ¿ã䜿ããã«ã³ãŒããã«ã¹ã¿ãã€ãºããæ¹æ³ã¯ãããŸããïŒ
1. ã¯ããã«
Pythonã¯å€ãã®ããã°ã©ããŒã«ãšã£ãŠãåå¿è ããäžçŽè ãŸã§å¹ åºããŠãŒã¶ãŒå±€ã«æ¯æãããŠããããã°ã©ãã³ã°èšèªã§ãããã®äžã§ãããªãŒããŒã©ã€ãããšããæ©èœã¯ããªããžã§ã¯ãæåããã°ã©ãã³ã°ã®åºæ¬çãªæŠå¿µã®ã²ãšã€ãšããŠãå€ãã®å Žé¢ã§éèŠãªåœ¹å²ãæãããŸãã
æ¬èšäºã§ã¯ãPythonã®ãªãŒããŒã©ã€ãã«ã€ããŠãåå¿è ã«ãåãããããããã«åºæ¬çãªæŠå¿µããå¿çšçãªäœ¿ãæ¹ãŸã§ã解説ããŠãããŸãã
ãªãŒããŒã©ã€ããšã¯äœã
ãªãŒããŒã©ã€ãïŒOverrideïŒã¯ã芪ã¯ã©ã¹ïŒåºåºã¯ã©ã¹ïŒã§å®çŸ©ãããã¡ãœããããåã¯ã©ã¹ïŒæŽŸçã¯ã©ã¹ïŒã§åå®çŸ©ããããšãæããŸããåå®çŸ©ããããšã§ã以äžã®ãããªå©ç¹ããããŸãïŒ
- æè»æ§ã®åäž: ç¶æ¿ã掻çšããã³ãŒãã®åå©çšæ§ãé«ããã
- ã³ãŒãã®ã«ã¹ã¿ãã€ãº: 芪ã¯ã©ã¹ã®æ©èœããã®ãŸãŸäœ¿ãã®ã§ã¯ãªããå¿ èŠã«å¿ããŠå€æŽã§ããã
- ä¿å®æ§ã®åäž: ã³ãŒãã®æ§é ãæŽçãããåŸããä¿®æ£ã容æã«ãªãã
ããšãã°ãWebã¢ããªã±ãŒã·ã§ã³ãã¬ãŒã ã¯ãŒã¯ã§ããDjangoã§ã¯ãã¯ã©ã¹ããŒã¹ã®ãã¥ãŒããªãŒããŒã©ã€ãããŠã«ã¹ã¿ã åŠçãè¿œå ããããšãããè¡ãããŸããããããå®äŸãããããªãŒããŒã©ã€ãã®ç¥èãPythonã®å®åã§ã©ãã ãéèŠã§ããããåãããŸãã
æ¬èšäºã®ç®ç
ãã®ã¬ã€ãã§ã¯ã以äžã®å 容ã段éçã«è§£èª¬ããŸãïŒ
- ãªãŒããŒã©ã€ãã®åºæ¬æŠå¿µãšä»çµã¿
- Pythonã§ã®å ·äœçãªå®è£ æ¹æ³
- ãããã泚æç¹ããšã©ãŒã®åé¿æ¹æ³
- å®éã«åœ¹ç«ã€ã³ãŒãäŸ
åå¿è ã®æ¹ã«ã¯åºç€çãªå 容ããäžçŽè ã«ã¯å¿çšçãªè©±é¡ãæäŸããã©ã®ã¬ãã«ã®ããã°ã©ããŒã«ãšã£ãŠã䟡å€ã®ããèšäºãç®æããŸããããã§ã¯ã次ã®ã»ã¯ã·ã§ã³ã§ããªãŒããŒã©ã€ããšã¯äœããã詳ããèŠãŠãããŸãããã
2. ãªãŒããŒã©ã€ããšã¯
Pythonã«ããããªãŒããŒã©ã€ãïŒOverrideïŒã¯ããªããžã§ã¯ãæåããã°ã©ãã³ã°ã®äžæ žçãªæŠå¿µã®ã²ãšã€ã§ãããã³ãŒãã®æè»æ§ãšåå©çšæ§ãé«ããéèŠãªæ©èœã§ãããã®ã»ã¯ã·ã§ã³ã§ã¯ããªãŒããŒã©ã€ãã®åºæ¬çãªå®çŸ©ãç¹åŸŽããããŠãªãŒããŒããŒããšã®éãã解説ããŸãã
ãªãŒããŒã©ã€ãã®åºæ¬æŠå¿µ
ãªãŒããŒã©ã€ããšã¯ã芪ã¯ã©ã¹ïŒåºåºã¯ã©ã¹ïŒã§å®çŸ©ãããã¡ãœããããåã¯ã©ã¹ïŒæŽŸçã¯ã©ã¹ïŒã§åå®çŸ©ããããšãæããŸããåå®çŸ©ããããšã§ã以äžã®ãããªå©ç¹ããããŸãïŒ
- 芪ã¯ã©ã¹ã®æ©èœãç¶æãã€ã€ã«ã¹ã¿ãã€ãºã§ãã
åã¯ã©ã¹ã«åºæã®åŠçãå ãããå Žåã«éåžžã«äŸ¿å©ã§ãã - äžè²«æ§ãä¿ã¡ãªããåŠçãå€æŽã§ãã
å ±éã®ã€ã³ã¿ãŒãã§ãŒã¹ãæäŸãã€ã€ãç°ãªãåäœãå®è£ ã§ããŸãã
以äžã¯ããªãŒããŒã©ã€ãã®åºæ¬çãªäŸã§ãã
class Parent:
def greet(self):
print("Hello from Parent!")
class Child(Parent):
def greet(self):
print("Hello from Child!")
# å®è¡äŸ
parent = Parent()
child = Child()
parent.greet() # åºå: Hello from Parent!
child.greet() # åºå: Hello from Child!
ãã®äŸã§ã¯ãgreet
ã¡ãœããã芪ã¯ã©ã¹ãšåã¯ã©ã¹ã®äž¡æ¹ã§å®çŸ©ãããŠããŸããåã¯ã©ã¹ã®greet
ã¡ãœããããªãŒããŒã©ã€ããããããšã§ãåã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ããåŒã³åºãããéã«ã¯æ°ããåŠçãå®è¡ãããŸãã
ãªãŒããŒããŒããšã®éã
åå¿è ãæ··åãããããã€ã³ããšããŠãããªãŒããŒã©ã€ãããšããªãŒããŒããŒããã®éãããããŸãããããã¯äŒŒããããªååã§ãããç°ãªãæŠå¿µã§ãã
- ãªãŒããŒã©ã€ã
芪ã¯ã©ã¹ã§å®çŸ©ãããã¡ãœãããåã¯ã©ã¹ã§åå®çŸ©ããããšã
å®è¡æïŒã©ã³ã¿ã€ã ïŒã«åäœã決ãŸãã - ãªãŒããŒããŒã
åãååã®ã¡ãœãããé¢æ°ãç°ãªãåŒæ°ã»ããã§å®çŸ©ããããšã
Pythonã§ã¯ãªãŒããŒããŒããçŽæ¥ãµããŒãããŠããªãïŒ@overload
ãã³ã¬ãŒã¿ãªã©ã§é¡äŒŒã®åäœãå®çŸå¯èœïŒã
以äžã¯ããªãŒããŒããŒãã®äŸãPythonã§åçŸããæ¹æ³ã§ãã
from typing import overload
class Calculator:
@overload
def add(self, x: int, y: int) -> int: ...
@overload
def add(self, x: str, y: str) -> str: ...
def add(self, x, y):
return x + y
calc = Calculator()
print(calc.add(2, 3)) # åºå: 5
print(calc.add("a", "b")) # åºå: ab
ãªãŒããŒã©ã€ãã䜿ãããå Žé¢
ãªãŒããŒã©ã€ãã¯ã以äžã®ãããªå Žé¢ã§ãã䜿çšãããŸãïŒ
- GUIããã°ã©ãã³ã°
ãã¿ã³ããŠã£ãžã§ããã®åäœãã«ã¹ã¿ãã€ãºã - Webãã¬ãŒã ã¯ãŒã¯
DjangoãFlaskãªã©ã§ãã¯ã©ã¹ããŒã¹ãã¥ãŒãæ¡åŒµããéã«å©çšã - ã²ãŒã éçº
ãã£ã©ã¯ã¿ãŒããªããžã§ã¯ãã®åäœãç¶æ¿ããŠå€æŽã
3. Pythonã«ããããªãŒããŒã©ã€ãã®å®è£ æ¹æ³
Pythonã§ãªãŒããŒã©ã€ããå®è£
ããæ¹æ³ã¯éåžžã«ã·ã³ãã«ã§ããã芪ã¯ã©ã¹ãšåã¯ã©ã¹ã®é¢ä¿ãsuper()
ã®äœ¿ãæ¹ãæ£ç¢ºã«ç解ããŠããå¿
èŠããããŸãããã®ã»ã¯ã·ã§ã³ã§ã¯ãåºæ¬çãªãªãŒããŒã©ã€ãã®æé ãããå€éç¶æ¿ã«ããã泚æç¹ãŸã§ã解説ããŸãã
åºæ¬çãªãªãŒããŒã©ã€ãã®å®è£
Pythonã§ã¯ã芪ã¯ã©ã¹ã®ã¡ãœãããšåãååã®ã¡ãœãããåã¯ã©ã¹ã«å®çŸ©ããã ãã§ãªãŒããŒã©ã€ããå®çŸã§ããŸãã
以äžã¯ãåºæ¬çãªãªãŒããŒã©ã€ãã®äŸã§ãã
class Parent:
def greet(self):
print("Hello from Parent!")
class Child(Parent):
def greet(self):
print("Hello from Child!")
# å®è¡äŸ
parent = Parent()
child = Child()
parent.greet() # åºå: Hello from Parent!
child.greet() # åºå: Hello from Child!
ãã®äŸã§ã¯ãChild
ã¯ã©ã¹ã§Parent
ã¯ã©ã¹ã®greet
ã¡ãœãããåå®çŸ©ããŠããŸãããã®ããã«ããããšã§ãChild
ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãgreet
ãåŒã³åºãéãåã¯ã©ã¹åŽã®åŠçãåªå
ãããŸãã
super()
ã䜿ã£ããªãŒããŒã©ã€ã
ãªãŒããŒã©ã€ãã§ã¯ã芪ã¯ã©ã¹ã®ã¡ãœãããå®å
šã«çœ®ãæããå ŽåããããŸããã芪ã¯ã©ã¹ã®åŠçããã®ãŸãŸå©çšãã€ã€æ¡åŒµãããå ŽåããããŸãããã®éã«äŸ¿å©ãªã®ãsuper()
é¢æ°ã§ãã
以äžã¯ãsuper()
ã䜿çšããäŸã§ãã
class Parent:
def greet(self):
print("Hello from Parent!")
class Child(Parent):
def greet(self):
super().greet()
print("And Hello from Child!")
# å®è¡äŸ
child = Child()
child.greet()
# åºå:
# Hello from Parent!
# And Hello from Child!
ãã®äŸã§ã¯ãChild
ã¯ã©ã¹ã®greet
ã¡ãœãããsuper().greet()
ãåŒã³åºãã芪ã¯ã©ã¹ã®greet
ã¡ãœãããå®è¡ããŠããŸãããã®åŸãåã¯ã©ã¹åºæã®åŠçãè¿œå ããŠããŸãã
super()
ã䜿çšããªãå Žåãšã®éã
super()
ã䜿çšããªãå Žåã芪ã¯ã©ã¹ã®ã¡ãœãããæ瀺çã«åŒã³åºãå¿
èŠããããŸãã
class Parent:
def greet(self):
print("Hello from Parent!")
class Child(Parent):
def greet(self):
Parent.greet(self)
print("And Hello from Child!")
# å®è¡äŸ
child = Child()
child.greet()
# åºå:
# Hello from Parent!
# And Hello from Child!
super()
ãšç°ãªãã芪ã¯ã©ã¹ãæ瀺çã«æå®ãããããè€æ°ã®èŠªã¯ã©ã¹ãæã€å Žåãç¶æ¿æ§é ãè€éãªå Žåã«ã¯ãšã©ãŒãåŒãèµ·ããããããªããŸããsuper()
ã¯ãã®ãããªåé¡ãé²ãããã«æšå¥šãããŸãã
å€éç¶æ¿ã«ããããªãŒããŒã©ã€ããšMRO
Pythonã§ã¯å€éç¶æ¿ããµããŒãããŠããŸããããã®å Žåãã©ã®ã¯ã©ã¹ã®ã¡ãœãããåŒã³åºãããããç解ããŠããå¿ èŠããããŸããããã決å®ããã®ãMROïŒã¡ãœãã解決é åºïŒã§ãã
class A:
def greet(self):
print("Hello from A!")
class B(A):
def greet(self):
print("Hello from B!")
class C(A):
def greet(self):
print("Hello from C!")
class D(B, C):
pass
# å®è¡äŸ
d = D()
d.greet() # åºå: Hello from B!
ãã®äŸã§ã¯ãã¯ã©ã¹D
ã¯B
ãšC
ãç¶æ¿ããŠããŸãããMROã«ããB
ã®greet
ã¡ãœãããåªå
ãããŸãã
MROã®ç¢ºèªæ¹æ³
MROã¯__mro__
å±æ§ãŸãã¯mro()
ã¡ãœããã䜿çšããŠç¢ºèªã§ããŸãã
print(D.__mro__)
# åºå: (<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)
ãã®åºåãããD -> B -> C -> A -> object
ã®é ã§ã¡ãœããã解決ãããããšãããããŸãã
4. å®è·µïŒPythonãªãŒããŒã©ã€ãã®ã³ãŒãäŸ
ããã§ã¯ããªãŒããŒã©ã€ãã®ç解ãæ·±ããããã«ãå
·äœçãªã³ãŒãäŸãããã€ã玹ä»ããŸããåºæ¬çãªã¡ãœããã®ãªãŒããŒã©ã€ãããã__init__
ã®ãªãŒããŒã©ã€ããå€éç¶æ¿ã®ã·ããªãªãŸã§å¹
åºãã«ããŒããŸãã
1. ã¡ãœããã®ãªãŒããŒã©ã€ã
ã¡ãœããã®ãªãŒããŒã©ã€ãã¯ãPythonã§æãäžè¬çãªãªãŒããŒã©ã€ãã®åœ¢æ ã§ãã芪ã¯ã©ã¹ã®ã¡ãœãããåã¯ã©ã¹ã§åå®çŸ©ããããšã§ãã«ã¹ã¿ã åŠçãè¿œå ã§ããŸãã
class Animal:
def speak(self):
return "I make a sound"
class Dog(Animal):
def speak(self):
return "Woof!"
# å®è¡äŸ
animal = Animal()
dog = Dog()
print(animal.speak()) # åºå: I make a sound
print(dog.speak()) # åºå: Woof!
ãã®äŸã§ã¯ãDog
ã¯ã©ã¹ã®spreak
ã¡ãœãããAnimal
ã¯ã©ã¹ã®ã¡ãœããããªãŒããŒã©ã€ãããŠãããDog
ãªããžã§ã¯ããåŒã³åºãããéã«ã¯ç¬èªã®åäœãå®è¡ãããŸãã
2. ã³ã³ã¹ãã©ã¯ã¿ïŒ__init__
ïŒã®ãªãŒããŒã©ã€ã
ã¯ã©ã¹ã®åæååŠçãå€æŽãããå Žåã__init__
ã¡ãœããããªãŒããŒã©ã€ãããŸããsuper()
ã䜿çšããããšã§ã芪ã¯ã©ã¹ã®åæååŠçãåŒãç¶ãããšãã§ããŸãã
class Person:
def __init__(self, name):
self.name = name
def greet(self):
return f"Hello, my name is {self.name}"
class Student(Person):
def __init__(self, name, student_id):
super().__init__(name)
self.student_id = student_id
def greet(self):
return f"Hello, my name is {self.name} and my student ID is {self.student_id}"
# å®è¡äŸ
student = Student("Alice", "S12345")
print(student.greet())
# åºå: Hello, my name is Alice and my student ID is S12345
ãã®äŸã§ã¯ãStudent
ã¯ã©ã¹ã®__init__
ã¡ãœããã芪ã¯ã©ã¹Person
ã®åæååŠçãç¶æ¿ãã€ã€ãæ°ãã«student_id
ãè¿œå ããŠããŸãã
3. å€éç¶æ¿æã®ãªãŒããŒã©ã€ããšMRO
å€éç¶æ¿ã®å Žåãã©ã®ã¯ã©ã¹ã®ã¡ãœãããå®è¡ããããã¯MROïŒã¡ãœãã解決é åºïŒã«ãã£ãŠæ±ºãŸããŸãã
class Vehicle:
def description(self):
return "This is a vehicle"
class Car(Vehicle):
def description(self):
return "This is a car"
class Boat(Vehicle):
def description(self):
return "This is a boat"
class AmphibiousVehicle(Car, Boat):
pass
# å®è¡äŸ
amphibious = AmphibiousVehicle()
print(amphibious.description())
# åºå: This is a car
ãã®äŸã§ã¯ãAmphibiousVehicle
ãCar
ãšBoat
ãç¶æ¿ããŠããŸãããMROã«ããCar
ã®description
ã¡ãœãããåªå
ãããŠå®è¡ãããŸãã
MROã®ç¢ºèªãå¿ããã«è¡ããšè¯ãã§ãããã
print(AmphibiousVehicle.__mro__)
# åºå: (<class '__main__.AmphibiousVehicle'>, <class '__main__.Car'>, <class '__main__.Boat'>, <class '__main__.Vehicle'>, <class 'object'>)
4. å®åçãªãªãŒããŒã©ã€ãäŸïŒDjangoã®ãã¥ãŒã¯ã©ã¹
Pythonã®Webãã¬ãŒã ã¯ãŒã¯Djangoã§ã¯ãã¯ã©ã¹ããŒã¹ãã¥ãŒããªãŒããŒã©ã€ãããŠã«ã¹ã¿ã åŠçãè¿œå ããããšãäžè¬çã§ãã
from django.views import View
from django.http import HttpResponse
class MyView(View):
def get(self, request):
return HttpResponse("This is a GET request")
class CustomView(MyView):
def get(self, request):
response = super().get(request)
return HttpResponse(response.content + b" Customized!")
# ãã®äŸã§ã¯ãCustomViewãMyViewã®GETãªã¯ãšã¹ãåŠçãæ¡åŒµããŠããŸãã
ãã€ã³ããŸãšã
- ã¡ãœããã®ãªãŒããŒã©ã€ãã¯ã芪ã¯ã©ã¹ãšåã¯ã©ã¹ã®éã§åŠçãåé¢ããã«ã¹ã¿ãã€ãºããããã®åºæ¬çãªä»çµã¿ã
super()
ã掻çšããããšã§ã芪ã¯ã©ã¹ã®åŠçãåŒãç¶ããªããæ¡åŒµãå¯èœã- å€éç¶æ¿æã¯ãMROãæèããŠã³ãŒããæžãããšãéèŠã
- å®åã§ã¯ããªãŒããŒã©ã€ããçšããŠã«ã¹ã¿ã åäœãå®è£ ããå Žé¢ãå€ãã
5. ãªãŒããŒã©ã€ãã®æ³šæç¹
ãªãŒããŒã©ã€ãã¯éåžžã«äŸ¿å©ãªæ©èœã§ããã誀ã£ã䜿ãæ¹ããããšã³ãŒãã®ä¿å®æ§ãå®è¡æã®åäœã«åé¡ãåŒãèµ·ããå¯èœæ§ããããŸãããã®ã»ã¯ã·ã§ã³ã§ã¯ãPythonã«ããããªãŒããŒã©ã€ãã®éã«æ³šæãã¹ããã€ã³ãã解説ããŸãã
super()
ã®æ£ãã䜿ãæ¹
super()
ã䜿ãããšã§èŠªã¯ã©ã¹ã®ã¡ãœãããåŒã³åºãããšãã§ããŸããã䜿ãæ¹ã誀ããšæåŸ
éãã«åäœããªãå ŽåããããŸãã
æšå¥šããã䜿ãæ¹
- åã¯ã©ã¹ã芪ã¯ã©ã¹ã®ã¡ãœãããå®å
šã«çœ®ãæããã®ã§ã¯ãªããæ¡åŒµããå Žåã¯
super()
ã䜿çšããŸãã
class Parent:
def greet(self):
print("Hello from Parent!")
class Child(Parent):
def greet(self):
super().greet() # 芪ã¯ã©ã¹ã®ã¡ãœãããåŒã³åºã
print("And Hello from Child!")
child = Child()
child.greet()
# åºå:
# Hello from Parent!
# And Hello from Child!
ééãããããã€ã³ã
- å€éç¶æ¿æã®èª€è§£
å€éç¶æ¿ã§ã¯ãsuper()
ã¯MROïŒã¡ãœãã解決é åºïŒã«åºã¥ããŠæ¬¡ã®ã¯ã©ã¹ãåŒã³åºããŸãã芪ã¯ã©ã¹ãæ瀺çã«æå®ããå Žåã¯ã泚æãå¿ èŠã§ãã
class A:
def greet(self):
print("Hello from A!")
class B(A):
def greet(self):
print("Hello from B!")
super().greet()
class C(A):
def greet(self):
print("Hello from C!")
class D(B, C):
def greet(self):
print("Hello from D!")
super().greet()
d = D()
d.greet()
# åºå:
# Hello from D!
# Hello from B!
# Hello from C!
# Hello from A!
super()
ãçç¥ãã
æ瀺çã«èŠªã¯ã©ã¹ãæå®ããŠã¡ãœãããåŒã³åºããšãã³ãŒããè€éã«ãªããšã©ãŒãåŒãèµ·ããããããªããŸãã
# éæšå¥šãªäŸ
class Child(Parent):
def greet(self):
Parent.greet(self)
print("And Hello from Child!")
å€éç¶æ¿ãšMROïŒã¡ãœãã解決é åºïŒ
å€éç¶æ¿ã§ã¯ãã©ã®ã¯ã©ã¹ã®ã¡ãœãããåŒã³åºãããããMROã決å®ããŸããè€éãªç¶æ¿æ§é ã®å ŽåãMROãæ£ç¢ºã«ç解ããŠããå¿ èŠããããŸãã
MROã確èªããæ¹æ³
MROã¯__mro__
å±æ§ãŸãã¯mro()
ã¡ãœããã§ç¢ºèªã§ããŸãã
class A:
def greet(self):
print("Hello from A!")
class B(A):
def greet(self):
print("Hello from B!")
class C(A):
def greet(self):
print("Hello from C!")
class D(B, C):
pass
print(D.__mro__)
# åºå: (<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)
éå°ãªãªãŒããŒã©ã€ãã®åŒå®³
芪ã¯ã©ã¹ã®ã»ãšãã©ã®ã¡ãœãããåã¯ã©ã¹ã§ãªãŒããŒã©ã€ããããšãç¶æ¿ã®å©ç¹ãèããã³ãŒãã®ä¿å®æ§ãäœäžããŸãã
æ¹åæ¡
- å¿
èŠãªç®æã ããªãŒããŒã©ã€ããã
ãã¹ãŠããªãŒããŒã©ã€ãããã芪ã¯ã©ã¹ã®åå©çšæ§ãç¶æããã - ã³ã³ããžã·ã§ã³ãæ€èšãã
å¿ èŠã«å¿ããŠãç¶æ¿ã§ã¯ãªãã³ã³ããžã·ã§ã³ïŒä»ã®ã¯ã©ã¹ãå±æ§ãšããŠæã€æ§é ïŒã䜿çšããã
class Engine:
def start(self):
print("Engine started")
class Car:
def __init__(self):
self.engine = Engine()
def start(self):
self.engine.start()
print("Car is ready to go!")
car = Car()
car.start()
# åºå:
# Engine started
# Car is ready to go!
ãããã°æã®æ³šæç¹
ãªãŒããŒã©ã€ããããã¡ãœãããæ£ããåäœããŠããªãå Žåã以äžã確èªããŸãïŒ
- åã¯ã©ã¹ã§èŠªã¯ã©ã¹ã®ã¡ãœãããé©åã«åŒã³åºããŠãããã
super()
ãæ£ãã䜿çšãããŠãããã- ç¶æ¿ã®é åºïŒMROïŒãæåŸ éããã
6. ãªãŒããŒããŒããšã®æ¯èŒ
ãªãŒããŒã©ã€ããšããæ··åãããã¡ãªããªãŒããŒããŒããã§ããããããã¯ç°ãªãæŠå¿µã§ããPythonã§ã¯ãªãŒããŒã©ã€ããäžè¬çã«äœ¿çšãããŸããããªãŒããŒããŒããä»ã®ããã°ã©ãã³ã°èšèªã§ã¯éèŠãªåœ¹å²ãæãããŸãããã®ã»ã¯ã·ã§ã³ã§ã¯ãäž¡è ã®éããšPythonã«ããããªãŒããŒããŒãã®çŸç¶ãããã«ãã®ä»£æ¿æ¡ã«ã€ããŠè§£èª¬ããŸãã
1. ãªãŒããŒã©ã€ããšã¯ïŒ
ãªãŒããŒã©ã€ãã¯ã芪ã¯ã©ã¹ã§å®çŸ©ãããã¡ãœãããåã¯ã©ã¹ã§åå®çŸ©ããããšãæããŸããããã«ããã芪ã¯ã©ã¹ã®åºæ¬æ©èœãç¶æãã€ã€ãåã¯ã©ã¹ã§ç¬èªã®æ¯ãèããè¿œå ã§ããŸãã
ç¹åŸŽ
- å®è¡æïŒã©ã³ã¿ã€ã ïŒã«é©çšãããã
- ã¯ã©ã¹ã®ç¶æ¿ãåææ¡ä»¶ãšãªãã
- åã¯ã©ã¹ã芪ã¯ã©ã¹ã®ã€ã³ã¿ãŒãã§ãŒã¹ãä¿æããªããåäœãå€æŽã
äŸïŒ
class Parent:
def greet(self):
return "Hello from Parent!"
class Child(Parent):
def greet(self):
return "Hello from Child!"
parent = Parent()
child = Child()
print(parent.greet()) # åºå: Hello from Parent!
print(child.greet()) # åºå: Hello from Child!
2. ãªãŒããŒããŒããšã¯ïŒ
ãªãŒããŒããŒãïŒOverloadïŒã¯ãåãååã®ã¡ãœãããé¢æ°ãç°ãªãåŒæ°ã§è€æ°å®çŸ©ããããšãæããŸãããªãŒããŒããŒãã¯éåžžãã³ã³ãã€ã«æïŒãã«ãæïŒã«æ±ºå®ãããŸãã
ä»èšèªã§ã®äŸïŒJavaã®å ŽåïŒ
class Calculator {
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
}
ãã®äŸã§ã¯ãåãååã®add
ã¡ãœãããç°ãªãåŒæ°åã§å®çŸ©ãããŠããŸããåŒã³åºãæã«é©åãªã¡ãœãããéžæãããŸãã
3. Pythonã«ããããªãŒããŒããŒã
Pythonã§ã¯æ£åŒãªãªãŒããŒããŒãã¯ãµããŒããããŠããŸãããé¢æ°ãã¡ãœããã¯åçåä»ãã®æ§è³ªãæã€ãããåãååã®é¢æ°ãåŸããå®çŸ©ãããšãåã®å®çŸ©ãäžæžããããŸãã
Pythonã§ã®äŸ
class Calculator:
def add(self, a, b):
return a + b
# åå®çŸ©ïŒäžæžãïŒ
def add(self, a, b, c):
return a + b + c
calc = Calculator()
# calc.add(1, 2) # ãšã©ãŒ: 2ã€ã®åŒæ°ã«å¯Ÿå¿ããã¡ãœãããååšããªã
äžèšã®ã³ãŒãã§ã¯ã2çªç®ã®add
ã¡ãœãããæåã®ãã®ãäžæžãããŠããŸãã3ã€ã®åŒæ°ãåãåãadd
ã¡ãœããã®ã¿ãååšããŸãã
4. Pythonã«ããããªãŒããŒããŒãã®å®çŸæ¹æ³
Pythonã§ã¯ããªãŒããŒããŒãã®ä»£æ¿æ段ãšããŠä»¥äžã®æ¹æ³ã䜿çšãããŸãã
(1) å¯å€é·åŒæ°ã䜿çšãã
class Calculator:
def add(self, *args):
return sum(args)
calc = Calculator()
print(calc.add(1, 2)) # åºå: 3
print(calc.add(1, 2, 3)) # åºå: 6
*args
ã䜿ãããšã§ãä»»æã®æ°ã®åŒæ°ã«å¯Ÿå¿å¯èœã§ãã
(2) @overload
ãã³ã¬ãŒã¿ã䜿çšãã
Pythonã®typing
ã¢ãžã¥ãŒã«ã«ã¯@overload
ãã³ã¬ãŒã¿ãçšæãããŠãããåãã³ãã䜿ã£ãŠãªãŒããŒããŒãã®ãããªæåãå®çŸã§ããŸãããã ããããã¯åãã§ãã¯ã®ããã§ãããå®è¡æã«ã¯æå³ãæã¡ãŸããã
from typing import overload
class Calculator:
@overload
def add(self, x: int, y: int) -> int: ...
@overload
def add(self, x: str, y: str) -> str: ...
def add(self, x, y):
return x + y
calc = Calculator()
print(calc.add(1, 2)) # åºå: 3
print(calc.add("a", "b")) # åºå: ab
@overload
ã¯åãã³ããæäŸããã ããªã®ã§ãå®éã®ããžãã¯ã¯1ã€ã®add
ã¡ãœããã«å®è£
ãããŠããŸãã
5. ãªãŒããŒã©ã€ããšãªãŒããŒããŒãã®äœ¿ãåã
- ãªãŒããŒã©ã€ãã¯ãã¯ã©ã¹ã®ç¶æ¿ãåæã§ããã芪ã¯ã©ã¹ã®æ©èœãå€æŽãŸãã¯æ¡åŒµããå Žåã«äœ¿çšããŸãã
- ãªãŒããŒããŒãã¯ãåãååã®ã¡ãœãããç°ãªãçšéã§äœ¿ãåããå Žåã«æå¹ã§ãããã ããPythonã§ã¯åãã§ãã¯ãæè»æ§ãèæ
®ããŠã
@overload
ãå¯å€é·åŒæ°ã䜿çšããæ¹æ³ãäž»æµã§ãã
7. ãŸãšã
ãããŸã§ãPythonã®ãªãŒããŒã©ã€ãã«ã€ããŠãåºæ¬çãªæŠå¿µããå®è£ æ¹æ³ã泚æç¹ãããã«ã¯ãªãŒããŒããŒããšã®éããŸã§ã詳ãã解説ããŠããŸããããã®ã»ã¯ã·ã§ã³ã§ã¯ãèšäºå šäœã®å 容ãç°¡åã«æ¯ãè¿ãããªãŒããŒã©ã€ããå¹æçã«æŽ»çšããããã®ãã€ã³ããæŽçããŸãã
ãªãŒããŒã©ã€ãã®åºæ¬çãªåœ¹å²
- ãªãŒããŒã©ã€ãã¯ã芪ã¯ã©ã¹ã§å®çŸ©ãããã¡ãœãããåã¯ã©ã¹ã§åå®çŸ©ããããšã§ãæè»ãªã«ã¹ã¿ãã€ãºãå¯èœã«ããŸãã
- ããã«ãããå ±éã®ã€ã³ã¿ãŒãã§ãŒã¹ãç¶æããªãããç°ãªãæ¯ãèããå®è£ ããããšãã§ããŸãã
Pythonã§ã®ãªãŒããŒã©ã€ãã®å®è£ æ¹æ³
- åã¯ã©ã¹ã§åãååã®ã¡ãœãããå®çŸ©ããããšã§ãç°¡åã«ãªãŒããŒã©ã€ããå¯èœã§ãã
super()
ã䜿çšãããšã芪ã¯ã©ã¹ã®ã¡ãœãããåŒã³åºãã€ã€ãè¿œå ã®åŠçãè¡ãããšãã§ããŸãã- å€éç¶æ¿æã«ã¯ãMROïŒã¡ãœãã解決é åºïŒã確èªããæå³ããé åºã§ã¡ãœãããåŒã³åºãããããšã確èªããããšãéèŠã§ãã
ãªãŒããŒã©ã€ããå©çšããéã®æ³šæç¹
super()
ã®äœ¿çš: 芪ã¯ã©ã¹ã®åŠçãé©åã«åŒãç¶ãããã«ãsuper()
ãæ£ãã䜿çšããŸãããã- éå°ãªãªãŒããŒã©ã€ããé¿ãã: ãã¹ãŠã®ã¡ãœããããªãŒããŒã©ã€ãããããšã¯é¿ããå¿ èŠãªéšåã ããåå®çŸ©ããã®ããã¹ããã©ã¯ãã£ã¹ã§ãã
- å€éç¶æ¿ã®èšèš: å€éç¶æ¿ãå©çšããéã¯ãç¶æ¿ã®é åºãè€éã«ãªããããªãããã«æ³šæããŸãããã
ãªãŒããŒããŒããšã®éããšæŽ»çšæ¹æ³
- ãªãŒããŒã©ã€ããšãªãŒããŒããŒãã¯äŒŒãååãæã¡ãŸãããå šãç°ãªãç®çãæã€æ©èœã§ãã
- ãªãŒããŒã©ã€ã: 芪ã¯ã©ã¹ã®ã¡ãœãããåã¯ã©ã¹ã§åå®çŸ©ã
- ãªãŒããŒããŒã: åãååã®ã¡ãœãããç°ãªãåŒæ°ã»ããã§å®çŸ©ïŒPythonã§ã¯æ£åŒãµããŒããããŠããªãïŒã
- Pythonã§ã¯ããªãŒããŒããŒãã®ä»£æ¿ãšããŠã
@overload
ãå¯å€é·åŒæ°ãå©çšã§ããŸãã
ãªãŒããŒã©ã€ãã®å®åã§ã®æŽ»çš
- Webãã¬ãŒã ã¯ãŒã¯: DjangoãFlaskã®ã¯ã©ã¹ããŒã¹ãã¥ãŒã§ã«ã¹ã¿ã åäœãè¿œå ã
- GUIããã°ã©ãã³ã°: ãã¿ã³ããŠã£ãžã§ããã®ã€ãã³ãåŠçãã«ã¹ã¿ãã€ãºã
- ã²ãŒã éçº: ãã£ã©ã¯ã¿ãŒããªããžã§ã¯ãã®åäœãç¶æ¿ããŠå€æŽã
çµè«
ãªãŒããŒã©ã€ãã¯ãPythonã«ããããªããžã§ã¯ãæåããã°ã©ãã³ã°ãç解ããå®è·µããäžã§æ¬ ãããªãã¹ãã«ã§ãããã®åºæ¬çãªä»çµã¿ã掻çšæ¹æ³ãç解ããããšã§ãä¿å®æ§ãé«ããæè»ãªã³ãŒããæžãããšãã§ããŸãããã®èšäºã§åŠãã å 容ãåèã«ããªãŒããŒã©ã€ããå®åããããžã§ã¯ãã§ãã²æŽ»çšããŠã¿ãŠãã ããã
8. FAQïŒãããã質åïŒ
Pythonã®ãªãŒããŒã©ã€ãã«ã€ããŠãèªè ãçåãæãããããã€ã³ãããŸãšããŸãããåå¿è ããäžçŽè ãŸã§ããããã質åãšãã®åçãç°¡æœã«è§£èª¬ããŸãã
Q1: ãªãŒããŒã©ã€ããšãªãŒããŒããŒãã®äž»ãªéãã¯äœã§ããïŒ
A:
- ãªãŒããŒã©ã€ãã¯ã芪ã¯ã©ã¹ã§å®çŸ©ãããã¡ãœãããåã¯ã©ã¹ã§åå®çŸ©ããããšãæããŸããããã¯ã¯ã©ã¹ã®ç¶æ¿ãåæã§ãã
- äŸ: 芪ã¯ã©ã¹ã®
greet()
ãåã¯ã©ã¹ã§å¥ã®æ¯ãèãã«å€æŽã - ãªãŒããŒããŒãã¯ãåãååã®ã¡ãœãããç°ãªãåŒæ°ã»ããã§è€æ°å®çŸ©ããããšã§ããPythonã§ã¯æ£åŒãªãªãŒããŒããŒãã¯ãµããŒããããŠããŸãããã
@overload
ãã³ã¬ãŒã¿ãå¯å€é·åŒæ°ã䜿ãããšã§äŒŒãåäœãå®çŸã§ããŸãã
Q2: super()
ã¯å¿
ã䜿ãã¹ãã§ããïŒ
A:
- åºæ¬çã«ã¯æšå¥šãããŸãã
super()
ã䜿ãããšã§ã芪ã¯ã©ã¹ã®ã¡ãœãããå®å šãã€æ£ç¢ºã«åŒã³åºãããšãã§ããŸããç¹ã«å€éç¶æ¿ãå©çšããŠããå ŽåãMROïŒã¡ãœãã解決é åºïŒã«åŸã£ãé©åãªèŠªã¯ã©ã¹ã®ã¡ãœãããåŒã³åºãããŸãã - äŸå€çãªã±ãŒã¹ã§ã¯ã
super()
ã䜿ããã芪ã¯ã©ã¹ãæ瀺çã«åŒã³åºãããšããããŸãããã ããããã¯ç¶æ¿ã®é åºãåçŽãªå Žåã«éããŸãã
Q3: 芪ã¯ã©ã¹ã®ã¡ãœãããå®å šã«ç¡å¹åããã«ã¯ã©ãããã°ããã§ããïŒ
A:
芪ã¯ã©ã¹ã®ã¡ãœãããå®å
šã«ç¡å¹åãããå Žåãåã¯ã©ã¹ã§ãªãŒããŒã©ã€ãããäœãããªãã¡ãœãããå®çŸ©ããŸãã
class Parent:
def greet(self):
print("Hello from Parent!")
class Child(Parent):
def greet(self):
pass # åã¯ã©ã¹ã§ç¡å¹å
child = Child()
child.greet() # åºåãªã
Q4: Pythonã§ãªãŒããŒããŒããå®çŸããæ¹æ³ã¯ãããŸããïŒ
A:
Pythonã§ã¯ãªãŒããŒããŒããçŽæ¥ãµããŒãããŠããŸãããã以äžã®ãããªæ¹æ³ã§äŒŒãåäœãåçŸã§ããŸãïŒ
- å¯å€é·åŒæ°ã䜿çš:
class Calculator:
def add(self, *args):
return sum(args)
calc = Calculator()
print(calc.add(1, 2)) # åºå: 3
print(calc.add(1, 2, 3)) # åºå: 6
@overload
ãã³ã¬ãŒã¿ãå©çšïŒåãã³ãã§åäœãæ瀺ããïŒ:
from typing import overload
class Calculator:
@overload
def add(self, x: int, y: int) -> int: ...
@overload
def add(self, x: str, y: str) -> str: ...
def add(self, x, y):
return x + y
calc = Calculator()
print(calc.add(1, 2)) # åºå: 3
print(calc.add("a", "b")) # åºå: ab
Q5: å€éç¶æ¿æããªãŒããŒã©ã€ããããŸãåäœããŸãããã©ãããã°ããã§ããïŒ
A:
å€éç¶æ¿ã§ã¯ãMROïŒã¡ãœãã解決é åºïŒã«åŸã£ãŠã¡ãœããã解決ãããŸããæåŸ
éãã«åäœããªãå Žåã以äžã確èªããŠãã ããïŒ
- MROã確èª:
ã¯ã©ã¹å.__mro__
ãŸãã¯ã¯ã©ã¹å.mro()
ã§è§£æ±ºé åºã確èªã
print(ClassName.__mro__)
super()
ã®æ£ãã䜿çš: 芪ã¯ã©ã¹ã®ã¡ãœããåŒã³åºããMROã«åŸã£ãŠããã確èªã- ç¶æ¿ã®é åºãèŠçŽã: å¿ èŠã§ããã°èšèšãã·ã³ãã«ã«å€æŽã
Q6: ãªãŒããŒã©ã€ããšç¶æ¿ã䜿ããã«ã³ãŒããã«ã¹ã¿ãã€ãºããæ¹æ³ã¯ãããŸããïŒ
A:
ãªãŒããŒã©ã€ãã䜿çšããã«ã³ãŒããã«ã¹ã¿ãã€ãºããå Žåãã³ã³ããžã·ã§ã³ãæå¹ã§ããã³ã³ããžã·ã§ã³ã¯ãããã¯ã©ã¹ãå¥ã®ã¯ã©ã¹ã®å±æ§ãšããŠå©çšããèšèšæ¹æ³ã§ãã
class Engine:
def start(self):
print("Engine started")
class Car:
def __init__(self):
self.engine = Engine()
def start(self):
self.engine.start()
print("Car is ready to go!")
car = Car()
car.start()
# åºå:
# Engine started
# Car is ready to go!
ã³ã³ããžã·ã§ã³ã¯ãç¶æ¿ãããæè»æ§ãé«ããéå°ãªãªãŒããŒã©ã€ããé¿ããéã«åœ¹ç«ã¡ãŸãã