Actuellement, j'ai un @classmethod
qui retourne la bonne classe étant donné une variable. Il ressemble à:Avoir une classe pour initialiser un objet d'une classe différente
class Parent():
@classmethod
def GetInstance(cls, variable):
if variable == 'foo':
return Child()
class Child(Parent):
def Something(self):
pass
instance = Parent.GetInstance('foo')
result = instance.Something()
Je préfère ne pas définir et utiliser GetInstance
. Au lieu de cela, je voudrais que le Main()
N'être:
instance = Parent('foo')
result = instance.Something()
Tout en gardant tous les avantages de la structure ci-dessus. Je veux que la classe Parent()
renvoie un objet de la classe Child()
lorsqu'il est appelé, sans avoir besoin d'utiliser une méthode. __init__
ne semble malheureusement pas aider, car il ne peut rien retourner. Des idées?
Vous pouvez utiliser '__new__', mais dans de nombreux cas, il vaut mieux simplement écrire une fonction usine. – BrenBarn
Oui, le modèle de classe de Python ne supporte pas facilement cela. Je ne peux pas penser à un moyen, parce que, comme vous l'avez découvert, «initit» n'aime pas «retourner» les choses. Utilisez juste le modèle d'usine ... ceci est bien connu. –
@BrenBarn Oui, je suppose que vous pouvez utiliser '__new__'. Ce serait une solution totalement sur-ingénierie à un non-problème. Ce serait totalement surprenant pour quiconque utilise votre «classe». –