object-oriented programming creating data types from other data types the fuzzybool implementation in this subsubsection is in the file fuzzyboolalt py one immediate difference from the previous version is that instead of providing static methods for conjunction(and disjunction()we have provided them as module functions for exampledef conjunction(*fuzzies)return fuzzybool(min(fuzzies)the code for this is much simpler than before because fuzzyboolalt fuzzybool objects are float subclassesand so can be used directly in place of float without needing any conversion (the inheritance tree is shown in figure accessing the function is also cleaner than before instead of having to specify both the module and the class (or using an instance)having done import fuzzyboolalt we can just write fuzzyboolalt conjunction(object float fuzzybool __new__(__init__(__eq__(__repr__(__str__(__new__(__init__(__eq__(__repr__(__str__(__hash__(__format__(__new__(__init__(__eq__(__repr__(__str__(__hash__(__format__(__bool__(__invert__(__and__(__iand__(key inherited implemented reimplemented figure the alternative fuzzybool class' inheritance hierarchy here is the fuzzybool' class line and its __new__(methodclass fuzzybool(float)def __new__(clsvalue= )return super(__new__(clsvalue if <value < else when we create new class it is usually mutable and relies on object __new__(to create the raw uninitialized object but in the case of immutable classes we need to do the creation and initialization in one step since once an immutable object has been created it cannot be changed