python の場合、module ごとでよければ、簡単に依存性を逆転できる。
person.py
は AbstractPerson
の実装に依存しない。
person.py
class AbstractPerson:
def say(self):
raise NotImplementedError()
def talk_each():
person_a = AbstractPerson()
person_b = AbstractPerson()
print(person_a.say())
print(person_b.say())
person
module に依存性を注入する場合は、以下のように書ける。
main.py
import person
class JapanesePerson:
def say(self):
return "こんにちは"
class EnglishPerson:
def say(self):
return "Hi"
person.AbstractPerson = JapanesePerson
person.talk_each()
# こんにちは
# こんにちは
person.AbstractPerson = EnglishPerson
person.talk_each()
# Hi
# Hi
いかにも python
という感じがする。