base.Base.assignment is simply replaced with a Mock object. You made it a descriptor by adding a __get__ method.
It’s a little verbose and a little unnecessary; you could simply set base.Base.assignment directly:
def test_empty(self):
Base.assignment = {}
assert len(Base().assignment.values()) == 0
This isn’t too safe when using test concurrency, of course.
To use a PropertyMock, I’d use:
with patch('base.Base.assignment', new_callable=PropertyMock) as a:
a.return_value = {'a': 1}
or even:
with patch('base.Base.assignment', new_callable=PropertyMock,
return_value={'a': 1}):