class BaseMiddleware:
    """
    Base class for implementing ASGI middleware. Inherit from this and
    override the setup() method if you want to do things before you
    get to.

    Note that subclasses of this are not self-safe; don't store state on
    the instance, as it serves multiple application instances. Instead, use
    scope.
    """

    def __init__(self, inner):
        """
        Middleware constructor - just takes inner application.
        """
        self.inner = inner

    async def __call__(self, scope, receive, send):
        """
        ASGI application; can insert things into the scope and run asynchronous
        code.
        """
        # Copy scope to stop changes going upstream
        scope = dict(scope)
        # Run the inner application along with the scope
        return await self.inner(scope, receive, send)

channels/middleware.py
class BaseMiddleware:
    """
    Base class for implementing ASGI middleware.

    Note that subclasses of this are not self-safe; don't store state on
    the instance, as it serves multiple application instances. Instead, use
    scope.
    """

    def __init__(self, inner):
        """
        Middleware constructor - just takes inner application.
        """
        self.inner = inner

    async def __call__(self, scope, receive, send):
        """
        ASGI application; can insert things into the scope and run asynchronous
        code.
        """
        # Copy scope to stop changes going upstream
        scope = dict(scope)
        # Run the inner application along with the scope
        return await self.inner(scope, receive, send)

channels/middleware.py
diff --git a/channels/middleware.py b/channels/middleware.py
index 8fcf36531..f3b994246 100644
--- a/channels/middleware.py
+++ b/channels/middleware.py
@@ -1,8 +1,6 @@
 class BaseMiddleware:
     """
-    Base class for implementing ASGI middleware. Inherit from this and
-    override the setup() method if you want to do things before you
-    get to.
+    Base class for implementing ASGI middleware.
 
     Note that subclasses of this are not self-safe; don't store state on
     the instance, as it serves multiple application instances. Instead, use

Improve BaseMiddleware class docstring
The class docstring of [BaseMiddleware](https://github.com/django/channels/blob/master/channels/middleware.py#L3) should be updated to explain that `__call__` (and `__init__`) must be changed for the middleware.

>  Base class for implementing ASGI middleware. Inherit from this and
>  override the setup() method if you want to do things before you
>  get to.

Also the purpose of the middlewares could also added to the docstring that they add additional information's in the scope with a reference to the ASGI reference or channels documentation (consumers scope section). This would help to understand the purpose of this to new users, what they can expect from the middlewares and what not.
