object __new__(__init__(__eq__(__repr__(__str__(__hash__(__format__(key inherited implemented reimplemented fuzzybool __value __new__(__init__(__eq__(__repr__(__str__(__hash__(__format__(__bool__(__float__(__invert__(__and__(__iand__(conjunction(static figure the fuzzybool class' inheritance hierarchy def __iand__(selfother)self __value min(self __valueother __valuereturn self the bitwise and operator returns new fuzzybool based on this one and the other onewhereas the augmented assignment (in-placeversion updates the private value strictly speakingthis is not immutable behaviorbut it does match the behavior of some other python immutablessuch as intwherefor exampleusing +looks like the left-hand operand is being changed but in fact it is re-bound to refer to new int object that holds the result of the addition in this case no rebinding is needed because we really do change the fuzzybool itself and we return self to support the chaining of operations we could also implement __rand__(this method is called when self and other are of different types and the __and__(method is not implemented for that particular pair of types this isn' needed for the fuzzybool class most of the special methods for binary operators have both " (in-placeand " (reflectthat isswap operandsversions we have not shown the implementation for __or__(which provides the bitwise operatoror for __ior__(which provides the in-place |operatorsince both are the same as the equivalent and methods except that we take the maximum value instead of the minimum value of self and other def __repr__(self)return ("{ }({ })format(self __class__ __name__self __value)