code: def join(self, other):
          '''return a tuple (new_self, new_other) such that
          new_self == self, new_other == other, and new_self.field == new_other.field '''
          if self.field == other.field:
              return self, other
  
          _, f1, f2 = Constructible.join_fields(self.field, other.field)
          return f1(self), f2(otherf join(self, other):
          '''return a tuple (new_self, new_other) such that
          new_self == self, new_other == other, and new_self.field == new_other.field '''
          if self.field == other.field:
              return self, other
  
          _, f1, f2 = Constructible.join_fields(self.field, other.field)
          return f1(self), f2(other)
docs: return a tuple (new_self, new_other) such that
          new_self == self, new_other == other, and new_self.field == new_other.field