Приведение экземпляра класса к подклассу
Вопрос
Я использую бото чтобы управлять некоторыми EC2 экземпляры.Он предоставляет класс экземпляра.Я бы хотел подклассировать его в соответствии с моими конкретными потребностями.Поскольку boto предоставляет интерфейс запросов для получения ваших экземпляров, мне нужно что-то для преобразования между классами.Это решение, кажется, работает, но изменение атрибута класса кажется сомнительным.Есть ли способ получше?
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
Решение
Я бы не стал создавать подклассы и приводить их.Я не думаю, что кастинг когда-либо был хорошей политикой.
Вместо этого рассмотрите Оболочку или Фасад.
class MyThing( object ):
def __init__( self, theInstance ):
self.ec2_instance = theInstance
Теперь вы можете создать подкласс MyThing
столько, сколько вы захотите, и вам не нужно будет разыгрывать свой boto.ec2.instance.Instance
вообще.Он остается более или менее непрозрачным элементом вашего объекта.