'Args:
fields: (optional) list of ``(name, value)`` header byte tuples,
e.g. ``[(b"Host", b"example.com")]``. All names and values must be bytes.
**headers: Additional headers to set. Will overwrite existing values from `fields`.
For convenience, underscores in header names will be transformed to dashes -
this behaviour does not extend to other methods.
If ``**headers`` contains multiple keys that have equal ``.lower()`` s,
the behavior is undefined.'

def __init__(self, fields=(), **headers):

    super().__init__(fields)
    for (key, value) in self.fields:
        if ((not isinstance(key, bytes)) or (not isinstance(value, bytes))):
            raise TypeError('Header    fields    must    be    bytes.')
    headers = {_always_bytes(name).replace('_', '-'): _always_bytes(value) for (name, value) in headers.items()}
    self.update(headers)
