Как вариант, потому что boo — это поле класса. В строке self.boo = self.boo происходит присваивание поля экземпляру. Не знаю, зачем это может быть нужно на практике, но вот пример для воспроизведения, когда это на что-то влияет:
class A:
factory = dict
def method(self):
return self.factory()
a = A()
A.factory = list
print(a.method()) # []
class B:
factory = dict
def __init__(self):
self.factory = self.factory
def method(self):
return self.factory()
b = B()
B.factory = list
print(b.method()) # всё равно словарь: {}