I don’t see the harm in a generator outliving the class body.
A = [1, 2, 3]
G = (x for x in A)
list(Contrived.G) # [1, 2, 3]
list(Contrived.G) # 
Maybe that’s not what you mean by “outlive”. The closest reason I can find for limiting member references to the for-clause is this consistency argument from the PEP, and it’s reasonable.
An alternative would have been to allow name binding in class scope to behave exactly like name binding in function scope. This rule would allow class attributes to be referenced either via attribute reference or simple name. This option was ruled out because it would have been inconsistent with all other forms of class and instance attribute access, which always use attribute references. Code that used simple names would have been obscure.
I think this would be an example of that obscurity.
x = 42
y = [x for x in range(10)] # hmm, I hope this doesn't change Obscure.x, etc.