J'utilise boto pour gérer des instances EC2. Il fournit une classe Instance. Je voudrais le sous-classer pour répondre à mes besoins particuliers. Puisque boto fournit une interface de requête pour obtenir vos instances, j'ai besoin de quelque chose à convertir entre les classes. Cette solution semble fonctionner, mais changer l'attribut de classe semble douteux. Y a-t-il un meilleur moyen?Diffuser une instance de classe dans une sous-classe
from boto.ec2.instance import Instance as _Instance
class Instance(_Instance):
@classmethod
def from_instance(cls, instance):
instance.__class__ = cls
# set other attributes that this subclass cares about
return instance
+1 Composition sur l'héritage lorsque cela est possible. –
La classe que je voudrais sous-classer est beaucoup plus complexe que les ajouts que je fais (vraiment juste quelques attributs). Pour exposer toutes les fonctionnalités de la classe enveloppée, j'aurais besoin de beaucoup de fonctions/propriétés enveloppées. Je comprends la question de la composition v. De l'héritage, mais aller sur la route de la composition semble être plus ennuyeux que ça en vaut la peine dans ce cas. – iconoplast
@iconoplast: "J'aurais besoin de beaucoup de fonctions/propriétés enveloppées". Pourquoi? L'instance est toujours appelée 'myThing.ec2_instance'. Pourquoi ne pouvez-vous pas appeler directement les propriétés et les méthodes de l'instance EC2? Quoi d'autre se passe-t-il? –