On Thu, 29 Jul 2021, Jeff Epler wrote: > On Thu, Jul 29, 2021 at 06:07:13PM -0400, John Kacur wrote: > > Add the __contains__ function to the rtevalCfgSection class to make "in" > > function correctly. > > Thank you. A possible correction: > > I believe the correct implementation (to delegate the 'in' operation to > the dictionary-like object self.__cfgdata) is > > def __contains__(self, key): > return key in self.__cfgdata > > I mocked a bit of rtevalCfgSection with your implementation: > class rtevalCfgSection: > def __init__(self, cfgdata): > self.__cfgdata = cfgdata > > def __contains__(self, key): > if key in self.__cfgdata.keys(): > return self.__cfgdata[key] > return None > > and then tried it with some carefully chosen values > > >>> d = {1: 'x', 2: 'y', 3: None, 4: False} > >>> r = rtevalConfig.rtevalCfgSection(d) > >>> 1 in d, 1 in r > (True, True) > >>> 9 in d, 9 in r > (False, False) > >>> 3 in d, 3 in r > (True, False) > > With the corrected implementation, the results would always be the same, > not different in the '3' case. > > Additionally, my version avoids extra operation on the underlying > dictionary. > > Jeff > Your version is simpler and correct in the case where the item is None Integrating your version into the patch and resending, thanks!