Last active
October 20, 2015 08:53
-
-
Save kirang89/8e66bb9f6fa6a31c1711 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/local/bin/python3 | |
# -*- coding: utf-8 -*- | |
from datetime import datetime | |
class DictMixin(object): | |
def to_dict(self): | |
return self._parse_dict(self.__dict__) | |
def _parse_dict(self, instance_dict): | |
result = {} | |
for key, value in instance_dict.items(): | |
result[key] = self._parse(value) | |
return result | |
def _parse(self, value): | |
if isinstance(value, DictMixin): | |
return value.to_dict() | |
elif isinstance(value, dict): | |
return self._parse_dict(value) | |
elif isinstance(value, list): | |
return [self._parse(v) for v in value] | |
elif hasattr(value, '__dict__'): | |
return self._parse_dict(value.__dict__) | |
elif isinstance(value, datetime): | |
return datetime.isoformat(value) | |
else: | |
return value | |
class Person(): | |
def __init__(self, name, age): | |
self.name, self.age = name, age | |
self.created_at = datetime.utcnow() | |
class Programmer(DictMixin): | |
def __init__(self, person, role): | |
self.person = person | |
self.role = role | |
if __name__ == '__main__': | |
p = Person('Kiran', 25) | |
pr = Programmer(p, 'Web Developer') | |
print(pr.to_dict()) | |
# Output: | |
# { | |
# 'person': { | |
# 'created_at': '2015-10-20T08:34:57.193786', | |
# 'age': 25, | |
# 'name': 'Kiran' | |
# }, | |
# 'role': 'Web Developer' | |
# } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment