Lançar um instância de classe a uma subclasse
Pergunta
Eu estou usando boto para gerenciar alguns instâncias EC2 . Ele fornece uma classe de Instância. Eu gostaria de subclasse-lo para atender às minhas necessidades específicas. Desde boto fornece uma interface de consulta para obter seus casos, eu preciso de algo para converter entre as classes. Esta solução parece funcionar, mas alterando o atributo de classe parece desonesto. Existe uma maneira melhor?
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
Solução
Eu não subclasse e elenco. Eu não acho que casting é sempre uma boa política.
Em vez disso, considere um Wrapper ou fachada.
class MyThing( object ):
def __init__( self, theInstance ):
self.ec2_instance = theInstance
Agora, você pode subclasse MyThing
tanto quanto você quer e você não precisa estar lançando seu boto.ec2.instance.Instance
em tudo. Ele permanece como um elemento mais ou menos opaca em seu objeto.