ndb.StructuredProperty no llama a los métodos de subclase ndb.PolyModel

Mientras almacenaba las superclases de ndb.Polymodel como una propiedad ndb.Structured, no pude acceder a los métodos de subclases; Los métodos de superclase se llamaron en su lugar y generaron NotImplementedError's. Aquí hay una versión resumida de lo que estoy tratando de lograr.

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)

Ahora diga que guardé un envío y almacené un Destino de envío en el campo de destinatario del envío. En el almacén de datos, el destinatario del envío.clase == ['Destinatario', 'Destinatario del envío']. Cuando llamo:

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

El error NotImplementedError se genera en lugar de la implementación ShippingRecipient de PrettyPrinting (...). Quiero que se llame al método de subclase al acceder al campo de destinatario del envío. ¿Hay alguna manera de llegar al método de subclase? Sé que decir que la propiedad estructurada es de tipo Recipiente hace que se llame al método de superclase, pero tal vez no entiendo completamente por qué almacenarían la subclase en el atributo recipiente.clase.