私は、クラスの継承、抽象基本クラス、さらにはPythonインターフェースについて説明しているドキュメントを読んでいます。しかし、私が望んでいるものとまったく同じになるものは何もありません。つまり、仮想クラスを構築する簡単な方法です。仮想クラスが呼び出されたら、与えられたパラメーターに基づいてより具体的なクラスをインスタンス化し、呼び出し元の関数に返します。今のところ、仮想クラスへの呼び出しを基になるクラスに再ルーティングする簡単な方法があります。
アイデアは次のとおりです。
class Shape:
def __init__(self, description):
if description == "It's flat": self.underlying_class = Line(description)
elif description == "It's spiky": self.underlying_class = Triangle(description)
elif description == "It's big": self.underlying_class = Rectangle(description)
def number_of_edges(self, parameters):
return self.underlying_class(parameters)
class Line:
def __init__(self, description):
self.desc = description
def number_of_edges(self, parameters):
return 1
class Triangle:
def __init__(self, description):
self.desc = description
def number_of_edges(self, parameters):
return 3
class Rectangle:
def __init__(self, description):
self.desc = description
def number_of_edges(self, parameters):
return 4
shape_dont_know_what_it_is = Shape("It's big")
shape_dont_know_what_it_is.number_of_edges(parameters)
number_of_edges()関数への呼び出しのみが渡されるため、私の再ルーティングは最適とはほど遠いものです。このようなものをShapeに追加しても、そのトリックを実行するために継ぎ目はありません。
def __getattr__(self, *args):
return underlying_class.__getattr__(*args)
私が間違っていることは何ですか?アイデア全体がうまく実装されていませんか?どんな助けでも大歓迎です。