Werfen Sie eine Klasseninstanz zu einer Unterklasse
Frage
Ich bin mit Boto einig EC2 Instanzen. Es stellt eine Instanz der Klasse. Ich möchte es zu Unterklasse meiner speziellen Bedürfnisse zu erfüllen. Da Boto eine Abfrage-Schnittstelle Ihre Instanzen zu bekommen bietet, muss ich etwas zwischen den Klassen zu konvertieren. Diese Lösung scheint zu funktionieren, aber scheint das Klassenattribut zu ändern vertrackt. Gibt es einen besseren Weg?
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
Lösung
Ich würde nicht Unterklasse und gegossen. Ich glaube nicht, Casting ist immer eine gute Politik.
Stattdessen sollten Sie einen Wrapper oder Fassade.
class MyThing( object ):
def __init__( self, theInstance ):
self.ec2_instance = theInstance
Jetzt können Sie Unterklasse MyThing
so viel wie Sie wollen, und Sie sollten nicht Ihre boto.ec2.instance.Instance
überhaupt werden müssen, Gießen. Es bleibt als mehr oder weniger undurchsichtiges Element in Ihrem Objekt.