>>> class PrintOnInitSet(set): ... def __init__(self, *args, **kwargs): ... print ("foo") ... set.__init__(self, *args, **kwargs) ... >>> a = PrintOnInitSet([2,7]) foo >>> b = set([1,7]) >>> a ^ b PrintOnInitSet([1, 2]) >>> a | b PrintOnInitSet([1, 2, 7]) >>> a & b PrintOnInitSet([7]) >>> a - b PrintOnInitSet([2]) >>> a.__or__(b) PrintOnInitSet([1, 2, 7]) >>> a.__and__(b) PrintOnInitSet([7]) >>> a.__sub__(b) PrintOnInitSet([2]) >>> a.__xor__(b) PrintOnInitSet([1, 2]) >>>