すべての A が AorB であり、すべての B が AorB であり、これらがすべて AorB であるように、クラス AorB を定義したいと考えています。もちろん、A と B は AorB のサブクラスでなければなりません。問題は、AorB.__init__
私が自分自身を納得させることができないとき、それは別のものであるべきです。AorB ファクトリを定義することはできますが、できれば AorB コンストラクタを使用したいと考えています。
class AorB:
def __init__(self,par):
if par: self=A(par) #!
else: self=B() #!
@staticmethod
def from_par(par):
if par: return A(par)
else: return B()
class A(AorB):
def __init__(self,par):
self.par=par
class B(AorB):
def __init__(self):
pass
print(
AorB.from_par(5),
AorB.from_par(0),
AorB(5),
AorB(0),
sep="\n")
ここでは自己への割り当てが機能しないことは知っていますが、意図を示したかっただけです。AorB
私が言ったように、工場 (from_par) は正常に動作します。 asではなく asと呼びたいだけですAorB.from_par
。
PS。私は知っています、__init__
おそらく手遅れです、自己のタイプはすでに決定されています。回答にメタクラスを自由に使用してください。それらについて何か役立つことを学ぶ時が来ました。:-)