Konwersja obiektu BaseClass do obiektu SubClass idiomatycznie?
Jest klasa bazowaBase
i podklasaSpecial
.
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
Jak mogę włączyć wystąpienieBase
w instancjęSpecial
? Obecnie mamclassmethod
zdefiniowany naSpecial
to po prostu zmienia przypisanie__dict__
:
class Special(Base):
...
@classmethod
def from_base(cls, baseobj):
special = Special()
special.__dict__ = baseobj.__dict__
return special
Czy to idiomatyczne? Jeśli nie, co by to było?
P.S. Przykładowy scenariusz: klasa bazowa to domyślna implementacja. W naturze najprawdopodobniej znajdziesz obiekty klasy bazowej. W niektórych projektach klasą podstawową są podklasy, a do podklasy zostały dodane specjalne metody. Teraz nadal pracujesz głównie z obiektami klasy bazowej, ale od czasu do czasu będziesz chciał „uaktualnić” do specjalnej klasy, ponieważ będziesz potrzebować dostępu do niektórych metod.