I don't mean to sound like a list police officer, but your question isn't really specific to pygame, it's about OOP design and small-scale design decisions. IMO, you should be posting it on a site like https://cseducators.stackexchange.com/ instead.

On 26.05.19 07:00, Irv Kalb wrote:
Thanks for the comments.  Yes, there are many more variables than just the 
score.  I just wanted to show one simple example to make the problem 
understandable.

I hadn't thought of the extra "Session" object, it sounds like an interesting 
approach.  However, I'm looking for a clear solution that I can teach to students who are 
just learning about OOP.  So, adding the extra layer would make things too complicated 
for my students.  Unless someone has a better approach, I will probably just use the 
approach of setting these variables to None in the __init__ and the real value in the 
reset method.

Thanks,

Irv


On May 25, 2019, at 5:26 PM, mar...@protonmail.ch wrote:

‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
On Saturday, May 25, 2019 8:55 PM, mspaintmaes...@gmail.com 
<mspaintmaes...@gmail.com> wrote:

For just a score variable, it's probably not a big deal to have an = 0 in there 
twice as duplicate code, but games are complicated and so I'm sure you've got 
lots of other fields as well, and that's where the duplication becomes 
problematic, especially if it's just there to appease the linter. I'm assuming 
the Game object is sort of an application context that survives the entire 
duration of the program's runtime, and that aside from score, you have a 
variety of other fields as well that need to be reset. For things like this, I 
would split game into a 2-tiered object, where each object has the desired 
lifespan. Something like this...

class ApplicationContext:
   def __init__(self):
     self.session = GameSession()

   def reset(self):
     self.session = GameSession()

class GameSession:
   def __init__(self):
     self.score = 0
     self.player_location = (0, 0)
     self.zombies = self.build_zombie_list()
     self.im_just_making_up_examples = etc

This looks like a possible solution, but I would advise against it. I've gone 
there a couple times I guess, and I ended up throwing away code that looked 
like this every time. Your `Game` can perfectly well deal with state itself. If 
you start writing state-holder objects, you'll create more work for yourself 
down the line. You'll think about it and then you're likely going to 
transparently proxy `GameSession` into `Game` using `__getattr__()`, and maybe 
even `__setattr__()` methods. Why, then, pretend you were dealing with 
attributes of your `Game` instance when you could and should just do that?

I think the best solution would be setting `self.score = None` in `__init__` 
and having it set to a proper value by .reset(). But I do admit that I'd 
probably type the line only to shut up a linter and not for any real purpose.

cheers!
mar77i


Sent with ProtonMail Secure Email.


Reply via email to