Hey, that's pretty good. However, my only concern is that it would delete the internally stored information about the classified agent (which we don't want).
If I were going to fix this problem (which I may well do soon -- I have to take another pass through this material when writing the book), I would actually define the __getitem__() function instead, as that controls the behavior of the [] operator.
This all comes down to separation of concerns. It shouldn't be the responsibility of __next__() to mutate the internal data to obscure information. It's only job should be to determine whether it exposes that information, and how.
Of course, in all honesty, there's nothing preventing a direct call to agents._roster[1] (Python has no private variables). If we were going to obfuscate or remove classified data, that should really occur on the add_agent() function.
For further actions, you may consider blocking this person and/or reporting abuse
We're a place where coders share, stay up-to-date and grow their careers.
I noticed this error case while reading through the article as well. In the sake of learning I just couldn't move on and ignore it.
Here is my fix. I am sure there are better ways to accomplish this, so please critique and let me know how I could better accomplish this.
The only thing I changed was the next method as follows:
Hey, that's pretty good. However, my only concern is that it would delete the internally stored information about the classified agent (which we don't want).
Ah, good point.
Take 2 [move classified to end of _roster]:
Thanks so much for these articles and for being so responsive. They are written very well , engaging, and a great resource.
If I were going to fix this problem (which I may well do soon -- I have to take another pass through this material when writing the book), I would actually define the
__getitem__()
function instead, as that controls the behavior of the[]
operator.This all comes down to separation of concerns. It shouldn't be the responsibility of
__next__()
to mutate the internal data to obscure information. It's only job should be to determine whether it exposes that information, and how.Of course, in all honesty, there's nothing preventing a direct call to
agents._roster[1]
(Python has no private variables). If we were going to obfuscate or remove classified data, that should really occur on theadd_agent()
function.