Normalmente (pelo menos no topo), você molda seu objeto para se comportar da maneira que deseja. name in USERNAMES
não faz distinção entre maiúsculas e minúsculas, por isso USERNAMES
precisa mudar:
class NameList(object):
def __init__(self, names):
self.names = names
def __contains__(self, name): # implements `in`
return name.lower() in (n.lower() for n in self.names)
def add(self, name):
self.names.append(name)
# now this works
usernames = NameList(USERNAMES)
print someone in usernames
O melhor disso é que ele abre o caminho para muitas melhorias, sem precisar alterar nenhum código fora da classe. Por exemplo, você pode alterar self.names
para um conjunto para pesquisas mais rápidas ou calcular a (n.lower() for n in self.names)
única vez e armazená-lo na classe e assim por diante ...
if 'CaseFudge'.lower() in [x.lower() for x in list]