':calls: `PATCH /repos/:owner/:repo/milestones/:number <http://developer.github.com/v3/issues/milestones>`_
:param title: string
:param state: string
:param description: string
:param due_on: date
:rtype: None'

def edit(self, title, state=github.GithubObject.NotSet, description=github.GithubObject.NotSet, due_on=github.GithubObject.NotSet):

    assert isinstance(title, (str, unicode)), title
    assert ((state is github.GithubObject.NotSet) or isinstance(state, (str, unicode))), state
    assert ((description is github.GithubObject.NotSet) or isinstance(description, (str, unicode))), description
    assert ((due_on is github.GithubObject.NotSet) or isinstance(due_on, datetime.date)), due_on
    post_parameters = {'title': title}
    if (state is not github.GithubObject.NotSet):
        post_parameters['state'] = state
    if (description is not github.GithubObject.NotSet):
        post_parameters['description'] = description
    if (due_on is not github.GithubObject.NotSet):
        post_parameters['due_on'] = due_on.strftime('%Y-%m-%d')
    (headers, data) = self._requester.requestJsonAndCheck('PATCH', self.url, input=post_parameters)
    self._useAttributes(data)
