encapsulating a global variable

BlindAnagram blindanagram at nowhere.com
Tue Feb 25 10:20:39 EST 2020


On 25/02/2020 14:14, Rhodri James wrote:
> On 25/02/2020 12:38, BlindAnagram wrote:
>> I would appreciate advice on whether it is possible to avoid the use of
>> a global variable used in a function by encapsulating it in a class
>> without maaking any changes to the call interface (which I cannot
>> change).
>>
>> I have:
>>
>> ----------------
>> seen = dict()
>>
>> def get_it(piece):
>>     ...
>>     return seen[piece]
>> ----------------
>>
>> and I am wondering if it is possible to use a class something like
>>
>> ----------------
>> class get_it(object):
>>
>>    seen = dict()
>>
>>    def __call__(piece):
>>      return seen[piece]
>> ----------------
>>
>> to avoid the global variable.
> 
> I wouldn't.  Calling the class name creates an instance of the class, so
> won't actually do what you want.  You could rewrite the class and create
> an instance to call instead:
> 
> class GetIt:
>   seen = dict()
> 
>   def __call__(self, piece):
>     return GetIt.seen[piece]
> 
> get_it = GetIt()
> 
> but then you have a global class instance hanging around, which is not
> actually any better than a global dictionary.

This doesn't work for me since get_it(piece) returns the error:

builtins.TypeError: get_it() takes no arguments

   Brian


More information about the Python-list mailing list