Esiste una classe base Base
e una sottoclasse Special
.Convertire un oggetto BaseClass in un oggetto SubClass in modo idiomatico?
class Base(object):
def __init__(self, name):
self.name = name
def greet(self):
return 'Hello %s' % self.name
class Special(Base):
def __init__(self, name):
super(Special, self).__init__(name)
def rhyme(self):
return 'Hi %s! How are you? Fine, thanks. What about you?' % self.name
Come posso trasformare un'istanza di Base
in un'istanza Special
? Attualmente ho un classmethod
definito su Special
che appena reassignes __dict__
:
class Special(Base):
...
@classmethod
def from_base(cls, baseobj):
special = Special()
special.__dict__ = baseobj.__dict__
return special
È questo idiomatica? Se no, cosa sarebbe?
P.S. Uno scenario di esempio: la classe base è un'implementazione predefinita. In natura, probabilmente troverai oggetti della classe base. Ora in alcuni progetti, la classe base è stata sottoclasse e sono stati aggiunti metodi speciali alla sottoclasse. Ora per lo più lavori ancora con oggetti di classe base, ma di volta in volta ti consigliamo di "aggiornare" alla classe speciale, perché avrai bisogno di accedere ad alcuni metodi.
Perché non è possibile creare un'istanza di applicare una forza di 'Special'? –