ndb.StructuredProperty nie wywołuje metod podklasy ndb.PolyModel

Przechowując superklasy ndb.Polymodel jako ndb.StructuredProperty, nie byłem w stanie uzyskać dostępu do metod podklasy; zamiast tego wywoływano metody nadklasy i wywoływano NotImplementedError. Oto skrócona wersja tego, co próbuję osiągnąć.

class Recipient(polymodel.PolyModel):
  name = ndb.StringProperty()

  def PrettyPrinting(self):
    raise NotImplementedError, 'Rawr'


class ShippingRecipient(Recipient):
  address_line_one = ndb.StringProperty()
  #there are other properties, but they aren't necessary here.

  def PrettyPrinting(self):
    return 'Hey, this should be called.'


class LocalRecipient(Recipient):
  distribution_location = ndb.StringProperty()
  #same deal, more attributes, but useless for this example.

  def PrettyPrinting(self):
    return 'Hey this should be called.'

class Shipment(ndb.Model):
  recipient = ndb.StructuredProperty(Recipient)

Teraz powiedz, że zapisałem przesyłkę i zapisałem odbiorcę wysyłki w polu odbiorcy przesyłki. W magazynie danych przesyłka odbiorca.klasa == [„odbiorca”, „odbiorca wysyłki”]. Kiedy dzwonię:

shipment = Shipment.get_by_id('some_key')
shipment.recipient.PrettyPrinting()

Błąd NotImplementedError jest wywoływany zamiast implementacji ShippingRecipient programu PrettyPrinting (...). Chcę, aby metoda podklasy była wywoływana podczas uzyskiwania dostępu do pola odbiorcy przesyłki. Czy istnieje sposób, aby zamiast tego dostać się do metody podklasy? Wiem, że powiedzenie własności strukturalnej jest typu Recipient, powoduje wywołanie metody superklasy, ale może nie do końca rozumiem, dlaczego będą przechowywać podklasę w atrybucie recipient.class.

questionAnswers(1)

yourAnswerToTheQuestion