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