code: def safeRef(target, onDelete = None):
      
      if hasattr(target, im_self):
          if getattr(target, im_self) is not None:
              # Turn a bound method into a BoundMethodWeakref instance.
              # Keep track of these instances for lookup by disconnect().
              assert hasattr(target, im_func), """safeRef target %r has %s, but no %s, don't know how to create reference"""%( target,im_self,im_func)
              reference = BoundMethodWeakref(
                  target=target,
                  onDelete=onDelete
              )
              return reference
      if onDelete is not None:
          return weakref.ref(target, onDelete)
      else:
          return weakref.ref( target )
docs: Return a *safe* weak reference to a callable target
  
      target -- the object to be weakly referenced, if it's a
          bound method reference, will create a BoundMethodWeakref,
          otherwise creates a simple weakref.
      onDelete -- if provided, will have a hard reference stored
          to the callable to be called after the safe reference
          goes out of scope with the reference object, (either a
          weakref or a BoundMethodWeakref) as argument.