Skip to content

succhiello/typedtuple

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

typedtuple

install

$ pip install typedtuple

basic definition

from typedtuple import typedtuple

# 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)
print v0.x  # 10.0
v1 = Vector(x=10, y=20)  # raises exception

using voluptuous schema

from voluptuous import Schema

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

using @schema decorator

from math import sqrt
from typedtuple import schema

@schema({'x': float, 'y': float, 'z': float})
class Vector(object):
    @property
    def length(self):
        return sqrt(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)
print v.length  # 3.0

using voluptuous functions

from voluptuous import Coerce
from typedtuple import schema

@schema({'x': Coerce(float), 'y': Coerce(float)})
class Vector(object):
    pass

v0 = Vector(x=10, y='20.0')
print v0.x  # 10.0
print v0.y  # 20.0

using OrderedDict

from collections import OrderedDict
from typedtuple import schema

@schema(OrderedDict((('x', float), ('y', float), ('z', float))))
class Vector(object):
    pass

print Vector._fields  # ('x', 'y', 'z')

caveat

TypedTuple is tuple. so...

from collections import OrderedDict
from typedtuple import typedtuple

Vector0 = 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

License

Stars

Watchers

Forks

Packages

No packages published

Languages