Skip to content

Latest commit

History

20 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

typedtuple

install

$ pip install typedtuple

basic definition

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 exception

using voluptuous schema

fromvoluptuousimportSchema# can use voluptuous.Schema as definitionVector=typedtuple('Vector', Schema({'x': float, 'y': float, 'z': float}, required=True))

using @schema decorator

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.0

using voluptuous functions

fromvoluptuousimportCoercefromtypedtupleimportschema@schema({'x': Coerce(float), 'y': Coerce(float)})classVector(object):
passv0=Vector(x=10, y='20.0')
printv0.x# 10.0printv0.y# 20.0

using OrderedDict

fromcollectionsimportOrderedDictfromtypedtupleimportschema@schema(OrderedDict((('x', float), ('y', float), ('z', float))))classVector(object):
passprintVector._fields# ('x', 'y', 'z')

caveat

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# True

TODO

use nose for test

benchmark

About

namedtuple with type definition

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages