$ pip install typedtuple
fromtypedtupleimporttypedtuple# definition dictionary is converted to voluptuous.Schema(definition_dict, required=True)Vector=typedtuple('Vector', {'x': float, 'y': float, 'z': float})
v0=Vector(x=10.0, y=20.0, z=30.0)
printv0.x# 10.0v1=Vector(x=10, y=20) # raises exceptionfromvoluptuousimportSchema# can use voluptuous.Schema as definitionVector=typedtuple('Vector', Schema({'x': float, 'y': float, 'z': float}, required=True))frommathimportsqrtfromtypedtupleimportschema@schema({'x': float, 'y': float, 'z': float})classVector(object):
@propertydeflength(self):
returnsqrt(pow(self.x, 2.0) +pow(self.y, 2.0) +pow(self.z, 2.0))
v=Vector(x=1.0, y=2.0, z=2.0)
printv.length# 3.0fromvoluptuousimportCoercefromtypedtupleimportschema@schema({'x': Coerce(float), 'y': Coerce(float)})classVector(object):
passv0=Vector(x=10, y='20.0')
printv0.x# 10.0printv0.y# 20.0fromcollectionsimportOrderedDictfromtypedtupleimportschema@schema(OrderedDict((('x', float), ('y', float), ('z', float))))classVector(object):
passprintVector._fields# ('x', 'y', 'z')TypedTuple is tuple. so...
fromcollectionsimportOrderedDictfromtypedtupleimporttypedtupleVector0=typedtuple('Vector0', OrderedDict((('x', float), ('y', float))))
Vector1=typedtuple('Vector1', OrderedDict((('y', float), ('x', float))))
v0=Vector0(x=10.0, y=20.0)
v1=Vector1(x=20.0, y=10.0)
v0==v1# Trueuse nose for test
benchmark