Because you are doing hole = BlackHole() outside of setup() or draw() - which is then using __init__(self) function to init at the same time.
The thing here is how Processing orders operations: First it runs through your code, defines classes and functions like setup() and draw() - and only after your code finishes getting parsed, only then it starts using setup() and draw().
As a result, you do hole = BlackHole()beforesetup() is run, but it determines width and height only in setup().
I don’t know how Python works, and I don’t know how to define a thing of BlackHole class without initializing it, so I don’t know how to help properly here. But I think you got the gist of it.
No problem!
Although, I don’t know if that’s a good practice in Python or not, but I think you could just leave __init__(self) definition empty, and make init2(self) function inside of your class that sets the PVector, and then call that init2(BlackHole) function in setup().