def __init__(self, machine, name=None, data=None):
self.name = name or data.pop('<STR_LIT:name>')<EOL>self.machine = machine<EOL>"""<STR_LIT>"""<EOL>if not data:<EOL><INDENT>data = self.machine.raw_snapshot_data(self.name)<EOL><DEDENT>self._save(data)<EOL>
:param machine: source of the snapshot
:type machine: :py:class:`smartdc.machine.Machine`

:param name: identifier for snapshot
:type name: :py:class:`basestring`

:param data: raw data for instantiation
:type data: :py:class:`dict`

Typically, a :py:class:`smartdc.machine.Snapshot` object is 
instantiated automatically by creating or listing snapshots for a 
:py:class:`smartdc.machine.Machine`. However, a snapshot may be 
manually instantiated by giving a 'machine' and a 'name' as 
parameters, and the snapshot's state and other data will be queried
from the server.

The following attributes are read-only:

:var name: human-readable label for the machine
:var state: last-known state of the machine
:var created: :py:class:`datetime.datetime` of machine creation 
    time
:var updated: :py:class:`datetime.datetime` of machine update 
    time