'Constructor, which may either return an existing cached object
or a new object.
:Parameters:
`name` : str
The well-known name to be advertised
`bus` : dbus.Bus
A Bus on which this service will be advertised.
Omitting this parameter or setting it to None has been
deprecated since version 0.82.1. For backwards compatibility,
if this is done, the global shared connection to the session
bus will be used.
`allow_replacement` : bool
If True, other processes trying to claim the same well-known
name will take precedence over this one.
`replace_existing` : bool
If True, this process can take over the well-known name
from other processes already holding it.
`do_not_queue` : bool
If True, this service will not be placed in the queue of
services waiting for the requested name if another service
already holds it.'

def __new__(cls, name, bus=None, allow_replacement=False, replace_existing=False, do_not_queue=False):

    validate_bus_name(name, allow_well_known=True, allow_unique=False)
    if (bus is None):
        import warnings
        warnings.warn('Omitting    the    "bus"    parameter    to    dbus.service.BusName.__init__    is    deprecated', DeprecationWarning, stacklevel=2)
        bus = SessionBus()
    if (name in bus._bus_names):
        return bus._bus_names[name]
    name_flags = ((((allow_replacement and _dbus_bindings.NAME_FLAG_ALLOW_REPLACEMENT) or 0) | ((replace_existing and _dbus_bindings.NAME_FLAG_REPLACE_EXISTING) or 0)) | ((do_not_queue and _dbus_bindings.NAME_FLAG_DO_NOT_QUEUE) or 0))
    retval = bus.request_name(name, name_flags)
    if (retval == _dbus_bindings.REQUEST_NAME_REPLY_PRIMARY_OWNER):
        pass
    elif (retval == _dbus_bindings.REQUEST_NAME_REPLY_IN_QUEUE):
        pass
    elif (retval == _dbus_bindings.REQUEST_NAME_REPLY_EXISTS):
        raise NameExistsException(name)
    elif (retval == _dbus_bindings.REQUEST_NAME_REPLY_ALREADY_OWNER):
        pass
    else:
        raise RuntimeError(('requesting    bus    name    %s    returned    unexpected    value    %s' % (name, retval)))
    bus_name = object.__new__(cls)
    bus_name._bus = bus
    bus_name._name = name
    bus._bus_names[name] = bus_name
    return bus_name
