Ok, thanks for the refresher on how Python manages member variables or data attributes. I haven't done a lot of python OOP yet.

So it sounds like scene's internal variables are in the same namespace as the variables we create to perform our animation, and that makes sense now that I've thought about it. I don't know why it surprised me so much. I did read a fair amount of documentation before writing my code, I guess it would have been nice if there had been a mention of avoiding scene's internal variables when introducing scene.

For the benefit of anyone running across this after making the same mistakes here is the fixed version:

from scene import * class MyScene (Scene): # note any variables declared here are class variables (shared by all copies of the class # Also avoid Scene's internal variables like t, dt, etc. setup(self): self.my_t = 0.1 #this is an instance variable, each copy of the class would get it's own def draw(self): print(self.my_t) run(MyScene())