code: def connect(self, receiver, sender=None, weak=True, dispatch_uid=None):
          
          if dispatch_uid:
              lookup_key = (dispatch_uid, _make_id(sender))
          else:
              lookup_key = (_make_id(receiver), _make_id(sender))
  
          if weak:
              ref = weakref.ref
              receiver_object = receiver
              # Check for bound methods
              if hasattr(receiver, '__self__') and hasattr(receiver, '__func__'):
                  ref = WeakMethod
                  receiver_object = receiver.__self__
              if six.PY3:
                  receiver = ref(receiver)
                  weakref.finalize(receiver_object, self._remove_receiver)
              else:
                  receiver = ref(receiver, self._remove_receiver)
  
          with self.lock:
              self._clear_dead_receivers()
              for r_key, _ in self.receivers:
                  if r_key == lookup_key:
                      break
              else:
                  self.receivers.append((lookup_key, receiver))
              self.sender_receivers_cache.clear()
docs: Connect receiver to sender for signal.
  
          Arguments:
  
              receiver
                  A function or an instance method which is to receive signals.
                  Receivers must be hashable objects.
  
                  If weak is True, then receiver must be weak referenceable.
  
                  Receivers must be able to accept keyword arguments.
  
                  If a receiver is connected with a dispatch_uid argument, it
                  will not be added if another receiver was already connected
                  with that dispatch_uid.
  
              sender
                  The sender to which the receiver should respond. Must either be
                  of type Signal, or None to receive events from any sender.
  
              weak
                  Whether to use weak references to the receiver. By default, the
                  module will attempt to use weak references to the receiver
                  objects. If this parameter is false, then strong references will
                  be used.
  
              dispatch_uid
                  An identifier used to uniquely identify a particular instance of
                  a receiver. This will usually be a string, though it may be
                  anything hashable.