removed unused code
Use new-style objects
In python 2.x, class Thing(Object) has certain properties that class Thing: doesn't.
For more, see e.g. http://appgrinders.com/2012/02/python-pitfalls-base-classes/
This is just a 'good practice' thing.
Clarified packages
Not using bencode.py.
clarifying which packages are in the stdlib
syntax error by me
I hit the recursion limit while downloading the test file.
I see no reason why this function should be recursive - it's modifying
its parent object and recursion gives you no benefit.
adding gitignore to ignore downloaded test file
whoops! forgot to call the new get_all_blocks fn
added correct file to gitignore
moved print statement to after recv() exits successfully
Two things: Refactor out file object and refactor send_request peer method.
1. Refactor out file object
There's one file object per tracker so it seems like it shouldn't be a separate object.
I'm putting it on the tracker.  I know this will require a little more thought
than I've given it - I think the implementation is broken.

2. Refactor send_request
Send_request had a strong code smell: two chunks of code duplicated
almost identically.  I built a different function, get_data, to call
the send_request function, and pulled the struct building into its own
function. I'm moving towards these functions gathering data and returning it,
rather than modifying object attributes in place.  Note: this is currently
broken.

Also:
Peer creation: no reason to do all work when creating a peer object.
I'm in the process of refactoring so that peer methods are cleaner.
This means removing Tracker object attributes from the __init__ Peer fn
so that only peer functions that *actually need* access to tracker attrs
will have access.  Cleaner.
miscellaneous - sorry
Don't name your file "file".
File is a reserved word in python, because it represents a type.
For example you could take a filename in string form, then call
file() on it, and create a file object.  If you have a variable
named "file" you overwrite this functionality.
comment doesn't reflect code
Passing decoded data into file info creator object, not decoding in __init__

I created a DesiredFileInfo in the repl and called __dict__ on it, which
returns a dictionary where the keys are the object's attributes and the
values are those attribute's current values.  The result is below.

You can see that you have all this redundant data attached to the object.
Everything in 'data' appears twice.

There are two solutions to this.  One is to move the decoding outside
the object and bind things one by one from the decoded dictionary. This
is the way I went.

The other solution would be to do the decoding in the __init__ function like
you had it, but call the variable just "data" - not self.data, binding it
to the object.  Since you process everything in "data" in the __init__ and
organize it differently, you never need this self.data parameter again.
Take advantage of the fact that variables pass out of scope once you exit
a function.

info.__dict__
{'comment': None, 'encoding': 'UTF-8', 'private': 0, 'creation_date': 1350689333, 'last_piece_size': 14687, 'number_of_whole_blocks_in_whole_piece': 1, 'announce_list': None, 'created_by': 'BitTorrent/7350', 'block_length': 16384, 'announce': 'http://thomasballinger.com:6969/announce', 'number_of_whole_pieces': 106, 'info_hash': <sha1 HASH object @ 0x1097ffcb0>, 'piece_length': 16384, 'pieces': '\xe4tyMx\x0eD]\xb6X@?M\xf0\x01\x8ca\xccF\x81\xd8\xdc\x19x\x80\xa4\x0fC\xd2|\x1a \xe4Q%"\xa4\x82\xc4YN\r\x1fg\x89\x14\x85\x87\x1bS~\x13\xe7w\x89\r\x1a\x80\xcdO&!<p\x83\xfeS\x16\x94\xb9f\x98\x8a\x88\xae\xab}\xe82\xac\xc2\x05\xd2\xf9{\xb1\x97#\xac\x80\xaa\xe5{\xad\xa5\x1a\x18\xabz \x18pj\x021+\xde\x03\t\x89~\xe0\x0e\xdf|,\xf3\xd0a\x18\xeb\xb6\xe7E\x8c\xa2Z@BK\x19.w*D\xc6\x1c\x8e\xc1N^\xcd\xcc \xf3\xce;\x84\xdc\t\xe2\'\xd6\xaa\xd7W\xed\x0f\xa0V\xba\xe2\xc4\xf7[W\xc9]\x88\xdfu\xfdZ\x1d\xfb\xdds\x8b(\n\xee=\xc5\x03w\xea9Dr\x1d\x16J\xe3\xc6?\x8c\xfe:\xa8G\xfe\xa7\xe1\xbb\xe8a3cZ\x8d\xd0\x15\x92C\x02\xa81\xa8K\xdcxu\\\x11s\xd4\x10\r\xcc\x15\xb3\x1c\xb5m\xce\x8a\xf9\xb7\xa3\x01J\x892\x857\xfe\xfa\x7f\x80o\x12\xcc;b\xd6\x02\x8eO\xa5L\xfe]\xfe):\x05\xc0\xaf\xa1t\xc0^\xe8F\xcf\xf9\x0eO\xe4#\xb8\x01\xd2\xa3\xa4\xbcQU\xc5\x14\xf3\xea\xcc\x9f\xb5\xcdS\xd7o\xca\xad\r\xa1\xaf\xcdsjr>o\x8cZ\x9f\xcec\x7fP\xcb\x99~87\xa0K\x08\x1f\xa6\x94\xf3R[\xd7\xa7I\x8ef\x89j\xf9ZR\xe2u\x89<\xc8\xeea\x08b\xa1\xb5dj\xac\x99B\x08u+q5\x119\xa3u\x95=Jj\xd5\xef\xc5\x0e\x8f(\xe0\xc60\xb9w\x97\x1f\xe6\x13mPUeA\xeb\x02\x1b\xec5\xa7\xae\xe9\x18\xa6\xfdI\xc0\xe2X\x87\x06\xec\x19B\xa5~\x9a~J\xabZC\xbb\n\xee\xe4\xd9\xd4=\x1e\xe37\x038?\x105X\xcf\x11t\x04\xe4\xd64\xd1P\xe0\x99\x8c\xdc\xe1\xc2\xbc\xd1\xe8\xc4|\xa26\xd52\xbdP\'\xb8W\t\xc3\xd1\xdd\xe2\xcf\x8ca\x1fX:(%u\t\x80mx1\r\xad\x1e:\xf6>\xc2^>\x83"\x0f\xefPm\xbd\xaeZ\xf7W\x01A\xca\x08*\x82\xde\xe1\x95\xf9\xe3C\\\xd0^\xe1E\xe4e\xce\xa9\xf4\xeb\x99\xc5B\xc2\xf0r\x98\xfc\xf6\xaf\x1a\xd7\xa7\xecZ\x89\x8f{\xa0m\xc2\xccBL\xaf\x11hv\x9f\x8bxZ\x90\x8f\xb8y\xf4{\xb39~\xe9esq\xfe\x9d*\xfc\x82\xa6\\\xc4\x10\xa0\xd6y\xa2\xfa<\xf2\xfd}\xa5R\xd5C}\x8a\x8a\xeb\xddd[=\xe3\x92\xb0\xb3\x9b\'\xfb\xc5\xf5B\xc6L\x08\xed\xe4-\xe4\x83u\xf2S\x99;Dc\x9f\x9e\x81\xfa\xb2\x02N\xf9z\xac\xe8\xe8*\xb2\xda*\xf1\xd80\x00p\x07zr\xfdw\x98=P\xfb\x9adN\xdc\x07\xd4\xe2\x8b}c\x18z9\x8f\\I=\xe3\xc2E\xcd\xf6\xea^7?\xdf\x1cZ\x83\x15f\xf3\x96\xcc\xedN\x8bM\x13\x96\xce\xdav\xb2\x81\xcb\x833c\x90w*=1\xb2\xad\xb6\xc1W0\t\x98\x05\xa4\t *b\xc8\xdc\xb7\xfdM\xc3S\x14\x9c\xc3\xde\xba9kv?a\xdbm\xc1\xb4\x80\tY\xbc\xd2\xcdz\xd1\xf4TB\xe0\x92\x96\xab\xb6\xd7\xd0\xa1Z\xa6\x9f\xa4\xf5\x0e\xc0]\x95*\xf0\x80\xaa=\x8dK\xe5\xab\xd6\x82\x88\xae\xef\x16\x8f\x92\x01\xf8\x00\t\xa7\x0f\xecG\xb4N\x98\x11\xf3\xd2\x15g\xa2L\x18\xfd\x91[\xccLs\x86\x1e\x13\x1b\x15\x16\xd9\xb0\xd4\x95\xe2\xdd\xec4\x19E\x13\x19\xe9\xecE3\x15\xff\xbf\xc1\x92\x03\xb5\xd4\x1f\xcdb\xa4\x0f\xc3\xf2,\xcc6(\x0e.\x08\xb8\xa9\xb6?\x94\x07\x07dj\xf6RL2M(\x0b\x0c\xf4W\'\xd8\x19I&-R9\x17\x86\x16\xe2\xe2\xb6*\x9d\x0e\xbd\x08\xd6\x83\x02\xaf*o\x8a\xa1h,E\x04\x95T\xe7\x17u\xdb\x08\xcd\x95\xef`\xcd\xa8\xdb\xb32\x91\x0c4\t\xaa\x9e\xc6\xa7\xd3\xceu\x90\x12\xbah\x80r\x97\x03Y\x8dfV\xf4\x95h\xc7\x00\x1a\xc2|\n\x03~]{j$f_\xeb\t\x12D=\xf1\xe9\xfa@\xfa\x99\xcf\xdf\tK"\x88\xcfh\x19\xe8XM\x9f\x84\xd3T\x11\x83\xad\xa8\xe2L\xb7\xd2\\%U\xb3\xf5\x91\x7f\x07\xff\xe1\xf2&\x85\xab@5\xbb\xa1K\x19w\xac\xd2\x83\x18C\x88n>V \xaaxR\xc6\xbb"XR\x0b\xfef\xc6\x90\x03O\n\x9a\xbd\xa3\xa3\x1d\xd5\x89\x15\x1at\x96\x10T\t\xeb\xac\xf4\x96\xf5\x85\x1bv*\x89\x99\x8b\xba\xacC\xa4\xf8\nd(gDk\xf8U\xe56\xd6\x84\x00q\xd9\xd3\xc3\x94\xf7\x9d!Q\x01\xf3\xc8P\x8cP\x96\xa1\xa3\x00\x81l\xca\xec\x94z\x17\x14\xf8\xa9\xfc\xd7\x8c\x02X\xa1\xee\xf5t\xd9\xda\xb4\x030&\xfe\xef\xd5\x7fJ\xbc*\x11\xc7(<\xe55\xfc\xf2\xde\xa3\xa7\xday#\xbb\xda\x84\xf6\x1a\xfe(\xc9\x05/+\x1f^G\xa4\x1ee\x17h\x9f]\x0ca\'M\xed\xdb\xb0\xb4DL\xb9`43\xb2\xbc\x8e%\x96\xa8s\x92(/\xbbb\x85\x98\xe2*E\x0f,\x03\xb8\x95\x8b\x83O\xc8#%\'t\xc0\x08O\xb3?F\xda\xf5\xc6\x81\xe3\xc0\x08\xc3r\x03u\xd6@\xf5r\xa4\xaaA\xbb\xd1\xf2\x9f0$\xb6\x85\x11\xab)\x02\xae{\x98H\xc6\xf7\x9d\x82g\xc2w\x15\x1b\xcc\x19\xc4/\xfc\xa2\x19Z\xf0\x02v\xdf1\xde\xd9\xe07\xfd\xd4\xd3\xc1l;vH\x01\xed:\xe3x\x9a\xc4U\xeei\xa1\xfe\x10\xf2\xbe?}C\xacPF\xd0et\xc1\x84\x13\xb1\'8\x96\xc4\x99\xcc6w\xc8\xfc\x80\x91\xa0\xca\xe918\xf2K\xe8\x9f\xb6\xe2\xf5\xf8-Ic\xe9\xde\x96\\$\x16\xa4\x96\\\x9f\x00\x18H-r\x0c\xf4-e\x9a\xbb\x81\x16\x01Ki\x9cs\xda %h|c\xb3\x8dL\x1d\xc4@!M\xcf-b\xb2\x13QH\xf0Q\xd4V\xa3\xbeyS\x92\xb5\xbfi\x96\xfd\x9d\xeb\xf8\r\x94G\xf8\xe6\x89\x12\xa7.\xef\r\x06\x18\xa7?:\x9a(o\xaa\xba\xc0\x08a\x92\x96\xb8Al/\xbb\xd6\xe3^\xc6{\xca\xb1\x98\xc7\xc4\xa5\x02\x1d\xbb\xd69O\xb5\xd0\xa4\xf4\x83\xcd[\xa7\xb5\x85g\x98\x03\xce\xda_W\xc4J\\}e8t\x03Ch\xde\xac\x8f\xe6\x88\x1b\xee\x9eg\x07\xe5;\x9b\xd3\xbc%\xa8\xe7\x19\xd39\xb4a\x92!\xaevJ\x00T\x1f\x9d)C\xa7\x1aF\x10\xf0E\xab\x04\x99\xcaf@p}\xaa\x9dz\x93\x84\xa8\x07\x1b\x82\xe9v\xd5\xfb\xe3D\xcd\xa9\xdbs\xc9\xc8t"<\x1b\xea\x89\xab\xe9\xb6\x02q\xc2h\x8d\x0f\xeb\xa8\t\t\xbc5\x0f:\xf32~\x13nm\x08\xc1]\xd5\x8a\xdfZ\xece8o\x8c\x90\xf5\x99\xb6\xd3J\x94D\xfe\xe1\xf0\xc1\x14\x19\x8fsc\xd1\xe7\x82?0u\xc5\x11\x16\x81\x8d\xa8+9\x03\xb33\xbb\xfb\x8f\xe8\x14\'\xb3\rg\xe2k\x118F\xba\x80\x8aWh\xcc\x8b\xe9%\x147\x1c?6r\xe1\x80\xa6`\xc8\xc8\xbeB\x94\xa1r\x1bA:sa\xa2\x98>\x11\xeelqw\x01\xe5\x04_]\xd0\x96\xd49\xbem\xe3\xb0B\x8c\x17\xb7\x84\x1b\xfeI\xfb\xeb\xc2\x0cj\x86\x96\xd4\xe1<\xd4\x9f\x95>:S\xdb>8\xb5[\xf0(\x8e hf\x81\t\xc3\xcd\xa2\xb2\xbaE\x8dh|\x08W-\xffKU\x13~\x16\x12G2\x82\x1c\x0ec\xa1\xe9\x1c\x99w\xf4)\xa4\x17e\x03+\xbd6\x9f\x86\x86\x8cC\xcbZ6QTk|\x0e\xa2(\xe2\xf3\x98\x17\xfb\xb8\x17\x9b\xdf\x07=\xe2Kj\xa9[\x81\xe7\xfc\x98DM\xbf\xe29\x82\x9b\x1b\x1b,\xa5\x08\xec!\x1aw\xd2V\x04\x85k\x94n\x04(0\xf6@\x91\x11\xc1\x96\xb9c\xf6~\xa2\x1d\x19\xc5\x11Q\xb8}\x03]\xff\x16\xfd\x95\xb8>9\x8c\xc0\xb2\xb1cj\xbfQ~\xfb\\/(ps\xec19\x02V\xf1M\xf7s\xd2\x99\x99\x96\xee^\x8d\xe1%\xa5w\xe3-\x1f\xa3\xcd{\xb0ar\x84\x12\xfa\xf4s\xf6\x17\x07\xb3f:c\x95\xedP\x1b\xa4\xa4\x06\x17\x0b\x08\x9d(ugO\xeep*\xf6\xa6\xb9\x11\x82\xe6\xe8\xa2LKXi!\x8e\x13\xa2{f7U\xdd\x80=@\xb9\x17v\x02\x86p\x96\x83\x07\xaf\xc0,M\xc2\x08\x8b\xbcUz\x0e\xa9\x88y\xc61\x9b\xa1m^5\x88\xb2\xdc\x94\x0fk/u\x05\xec\x0e\xbaXFL\x15\xa0\xbf\xc6\x13\x07\xf1J\xb9\xda,\xe9\\y\xdf\x96\xe3{D\xe3\xb3\xbb\xa0\x80\xa7\x80\x9aL)\x88f\x13\xdap6U\xc6\x89\xeb\nW\t\r5\x9f\xfb\x84\xb4\x87\xf9\x96\xb6\x11\xee?8\xcf\x95\xe5\x10\x9a\x12\xd8\xf1+\x8d\x92:\x80\xbdG\xac=]\xa7=Q\x94\x87\x8e!\x87}~\x10\x82F\x91\x1e?\x94\x89\xc1\x8d\x12\x87\xba\r\xf1\x1c3\x1a-F\x80\t\x06N\x07Q\xba\x15\xc0\xe4A\xbd[\xd4\xaaC\x14\x89\x9do\x0f\xbc>\x14\xc3\x8c\xcd', 'data': {'creation date': 1350689333, 'announce': 'http://thomasballinger.com:6969/announce', 'info': {'length': 1751391, 'piece length': 16384, 'name': '1999-12-31 18.20.09.jpg', 'pieces': '\xe4tyMx\x0eD]\xb6X@?M\xf0\x01\x8ca\xccF\x81\xd8\xdc\x19x\x80\xa4\x0fC\xd2|\x1a \xe4Q%"\xa4\x82\xc4YN\r\x1fg\x89\x14\x85\x87\x1bS~\x13\xe7w\x89\r\x1a\x80\xcdO&!<p\x83\xfeS\x16\x94\xb9f\x98\x8a\x88\xae\xab}\xe82\xac\xc2\x05\xd2\xf9{\xb1\x97#\xac\x80\xaa\xe5{\xad\xa5\x1a\x18\xabz \x18pj\x021+\xde\x03\t\x89~\xe0\x0e\xdf|,\xf3\xd0a\x18\xeb\xb6\xe7E\x8c\xa2Z@BK\x19.w*D\xc6\x1c\x8e\xc1N^\xcd\xcc \xf3\xce;\x84\xdc\t\xe2\'\xd6\xaa\xd7W\xed\x0f\xa0V\xba\xe2\xc4\xf7[W\xc9]\x88\xdfu\xfdZ\x1d\xfb\xdds\x8b(\n\xee=\xc5\x03w\xea9Dr\x1d\x16J\xe3\xc6?\x8c\xfe:\xa8G\xfe\xa7\xe1\xbb\xe8a3cZ\x8d\xd0\x15\x92C\x02\xa81\xa8K\xdcxu\\\x11s\xd4\x10\r\xcc\x15\xb3\x1c\xb5m\xce\x8a\xf9\xb7\xa3\x01J\x892\x857\xfe\xfa\x7f\x80o\x12\xcc;b\xd6\x02\x8eO\xa5L\xfe]\xfe):\x05\xc0\xaf\xa1t\xc0^\xe8F\xcf\xf9\x0eO\xe4#\xb8\x01\xd2\xa3\xa4\xbcQU\xc5\x14\xf3\xea\xcc\x9f\xb5\xcdS\xd7o\xca\xad\r\xa1\xaf\xcdsjr>o\x8cZ\x9f\xcec\x7fP\xcb\x99~87\xa0K\x08\x1f\xa6\x94\xf3R[\xd7\xa7I\x8ef\x89j\xf9ZR\xe2u\x89<\xc8\xeea\x08b\xa1\xb5dj\xac\x99B\x08u+q5\x119\xa3u\x95=Jj\xd5\xef\xc5\x0e\x8f(\xe0\xc60\xb9w\x97\x1f\xe6\x13mPUeA\xeb\x02\x1b\xec5\xa7\xae\xe9\x18\xa6\xfdI\xc0\xe2X\x87\x06\xec\x19B\xa5~\x9a~J\xabZC\xbb\n\xee\xe4\xd9\xd4=\x1e\xe37\x038?\x105X\xcf\x11t\x04\xe4\xd64\xd1P\xe0\x99\x8c\xdc\xe1\xc2\xbc\xd1\xe8\xc4|\xa26\xd52\xbdP\'\xb8W\t\xc3\xd1\xdd\xe2\xcf\x8ca\x1fX:(%u\t\x80mx1\r\xad\x1e:\xf6>\xc2^>\x83"\x0f\xefPm\xbd\xaeZ\xf7W\x01A\xca\x08*\x82\xde\xe1\x95\xf9\xe3C\\\xd0^\xe1E\xe4e\xce\xa9\xf4\xeb\x99\xc5B\xc2\xf0r\x98\xfc\xf6\xaf\x1a\xd7\xa7\xecZ\x89\x8f{\xa0m\xc2\xccBL\xaf\x11hv\x9f\x8bxZ\x90\x8f\xb8y\xf4{\xb39~\xe9esq\xfe\x9d*\xfc\x82\xa6\\\xc4\x10\xa0\xd6y\xa2\xfa<\xf2\xfd}\xa5R\xd5C}\x8a\x8a\xeb\xddd[=\xe3\x92\xb0\xb3\x9b\'\xfb\xc5\xf5B\xc6L\x08\xed\xe4-\xe4\x83u\xf2S\x99;Dc\x9f\x9e\x81\xfa\xb2\x02N\xf9z\xac\xe8\xe8*\xb2\xda*\xf1\xd80\x00p\x07zr\xfdw\x98=P\xfb\x9adN\xdc\x07\xd4\xe2\x8b}c\x18z9\x8f\\I=\xe3\xc2E\xcd\xf6\xea^7?\xdf\x1cZ\x83\x15f\xf3\x96\xcc\xedN\x8bM\x13\x96\xce\xdav\xb2\x81\xcb\x833c\x90w*=1\xb2\xad\xb6\xc1W0\t\x98\x05\xa4\t *b\xc8\xdc\xb7\xfdM\xc3S\x14\x9c\xc3\xde\xba9kv?a\xdbm\xc1\xb4\x80\tY\xbc\xd2\xcdz\xd1\xf4TB\xe0\x92\x96\xab\xb6\xd7\xd0\xa1Z\xa6\x9f\xa4\xf5\x0e\xc0]\x95*\xf0\x80\xaa=\x8dK\xe5\xab\xd6\x82\x88\xae\xef\x16\x8f\x92\x01\xf8\x00\t\xa7\x0f\xecG\xb4N\x98\x11\xf3\xd2\x15g\xa2L\x18\xfd\x91[\xccLs\x86\x1e\x13\x1b\x15\x16\xd9\xb0\xd4\x95\xe2\xdd\xec4\x19E\x13\x19\xe9\xecE3\x15\xff\xbf\xc1\x92\x03\xb5\xd4\x1f\xcdb\xa4\x0f\xc3\xf2,\xcc6(\x0e.\x08\xb8\xa9\xb6?\x94\x07\x07dj\xf6RL2M(\x0b\x0c\xf4W\'\xd8\x19I&-R9\x17\x86\x16\xe2\xe2\xb6*\x9d\x0e\xbd\x08\xd6\x83\x02\xaf*o\x8a\xa1h,E\x04\x95T\xe7\x17u\xdb\x08\xcd\x95\xef`\xcd\xa8\xdb\xb32\x91\x0c4\t\xaa\x9e\xc6\xa7\xd3\xceu\x90\x12\xbah\x80r\x97\x03Y\x8dfV\xf4\x95h\xc7\x00\x1a\xc2|\n\x03~]{j$f_\xeb\t\x12D=\xf1\xe9\xfa@\xfa\x99\xcf\xdf\tK"\x88\xcfh\x19\xe8XM\x9f\x84\xd3T\x11\x83\xad\xa8\xe2L\xb7\xd2\\%U\xb3\xf5\x91\x7f\x07\xff\xe1\xf2&\x85\xab@5\xbb\xa1K\x19w\xac\xd2\x83\x18C\x88n>V \xaaxR\xc6\xbb"XR\x0b\xfef\xc6\x90\x03O\n\x9a\xbd\xa3\xa3\x1d\xd5\x89\x15\x1at\x96\x10T\t\xeb\xac\xf4\x96\xf5\x85\x1bv*\x89\x99\x8b\xba\xacC\xa4\xf8\nd(gDk\xf8U\xe56\xd6\x84\x00q\xd9\xd3\xc3\x94\xf7\x9d!Q\x01\xf3\xc8P\x8cP\x96\xa1\xa3\x00\x81l\xca\xec\x94z\x17\x14\xf8\xa9\xfc\xd7\x8c\x02X\xa1\xee\xf5t\xd9\xda\xb4\x030&\xfe\xef\xd5\x7fJ\xbc*\x11\xc7(<\xe55\xfc\xf2\xde\xa3\xa7\xday#\xbb\xda\x84\xf6\x1a\xfe(\xc9\x05/+\x1f^G\xa4\x1ee\x17h\x9f]\x0ca\'M\xed\xdb\xb0\xb4DL\xb9`43\xb2\xbc\x8e%\x96\xa8s\x92(/\xbbb\x85\x98\xe2*E\x0f,\x03\xb8\x95\x8b\x83O\xc8#%\'t\xc0\x08O\xb3?F\xda\xf5\xc6\x81\xe3\xc0\x08\xc3r\x03u\xd6@\xf5r\xa4\xaaA\xbb\xd1\xf2\x9f0$\xb6\x85\x11\xab)\x02\xae{\x98H\xc6\xf7\x9d\x82g\xc2w\x15\x1b\xcc\x19\xc4/\xfc\xa2\x19Z\xf0\x02v\xdf1\xde\xd9\xe07\xfd\xd4\xd3\xc1l;vH\x01\xed:\xe3x\x9a\xc4U\xeei\xa1\xfe\x10\xf2\xbe?}C\xacPF\xd0et\xc1\x84\x13\xb1\'8\x96\xc4\x99\xcc6w\xc8\xfc\x80\x91\xa0\xca\xe918\xf2K\xe8\x9f\xb6\xe2\xf5\xf8-Ic\xe9\xde\x96\\$\x16\xa4\x96\\\x9f\x00\x18H-r\x0c\xf4-e\x9a\xbb\x81\x16\x01Ki\x9cs\xda %h|c\xb3\x8dL\x1d\xc4@!M\xcf-b\xb2\x13QH\xf0Q\xd4V\xa3\xbeyS\x92\xb5\xbfi\x96\xfd\x9d\xeb\xf8\r\x94G\xf8\xe6\x89\x12\xa7.\xef\r\x06\x18\xa7?:\x9a(o\xaa\xba\xc0\x08a\x92\x96\xb8Al/\xbb\xd6\xe3^\xc6{\xca\xb1\x98\xc7\xc4\xa5\x02\x1d\xbb\xd69O\xb5\xd0\xa4\xf4\x83\xcd[\xa7\xb5\x85g\x98\x03\xce\xda_W\xc4J\\}e8t\x03Ch\xde\xac\x8f\xe6\x88\x1b\xee\x9eg\x07\xe5;\x9b\xd3\xbc%\xa8\xe7\x19\xd39\xb4a\x92!\xaevJ\x00T\x1f\x9d)C\xa7\x1aF\x10\xf0E\xab\x04\x99\xcaf@p}\xaa\x9dz\x93\x84\xa8\x07\x1b\x82\xe9v\xd5\xfb\xe3D\xcd\xa9\xdbs\xc9\xc8t"<\x1b\xea\x89\xab\xe9\xb6\x02q\xc2h\x8d\x0f\xeb\xa8\t\t\xbc5\x0f:\xf32~\x13nm\x08\xc1]\xd5\x8a\xdfZ\xece8o\x8c\x90\xf5\x99\xb6\xd3J\x94D\xfe\xe1\xf0\xc1\x14\x19\x8fsc\xd1\xe7\x82?0u\xc5\x11\x16\x81\x8d\xa8+9\x03\xb33\xbb\xfb\x8f\xe8\x14\'\xb3\rg\xe2k\x118F\xba\x80\x8aWh\xcc\x8b\xe9%\x147\x1c?6r\xe1\x80\xa6`\xc8\xc8\xbeB\x94\xa1r\x1bA:sa\xa2\x98>\x11\xeelqw\x01\xe5\x04_]\xd0\x96\xd49\xbem\xe3\xb0B\x8c\x17\xb7\x84\x1b\xfeI\xfb\xeb\xc2\x0cj\x86\x96\xd4\xe1<\xd4\x9f\x95>:S\xdb>8\xb5[\xf0(\x8e hf\x81\t\xc3\xcd\xa2\xb2\xbaE\x8dh|\x08W-\xffKU\x13~\x16\x12G2\x82\x1c\x0ec\xa1\xe9\x1c\x99w\xf4)\xa4\x17e\x03+\xbd6\x9f\x86\x86\x8cC\xcbZ6QTk|\x0e\xa2(\xe2\xf3\x98\x17\xfb\xb8\x17\x9b\xdf\x07=\xe2Kj\xa9[\x81\xe7\xfc\x98DM\xbf\xe29\x82\x9b\x1b\x1b,\xa5\x08\xec!\x1aw\xd2V\x04\x85k\x94n\x04(0\xf6@\x91\x11\xc1\x96\xb9c\xf6~\xa2\x1d\x19\xc5\x11Q\xb8}\x03]\xff\x16\xfd\x95\xb8>9\x8c\xc0\xb2\xb1cj\xbfQ~\xfb\\/(ps\xec19\x02V\xf1M\xf7s\xd2\x99\x99\x96\xee^\x8d\xe1%\xa5w\xe3-\x1f\xa3\xcd{\xb0ar\x84\x12\xfa\xf4s\xf6\x17\x07\xb3f:c\x95\xedP\x1b\xa4\xa4\x06\x17\x0b\x08\x9d(ugO\xeep*\xf6\xa6\xb9\x11\x82\xe6\xe8\xa2LKXi!\x8e\x13\xa2{f7U\xdd\x80=@\xb9\x17v\x02\x86p\x96\x83\x07\xaf\xc0,M\xc2\x08\x8b\xbcUz\x0e\xa9\x88y\xc61\x9b\xa1m^5\x88\xb2\xdc\x94\x0fk/u\x05\xec\x0e\xbaXFL\x15\xa0\xbf\xc6\x13\x07\xf1J\xb9\xda,\xe9\\y\xdf\x96\xe3{D\xe3\xb3\xbb\xa0\x80\xa7\x80\x9aL)\x88f\x13\xdap6U\xc6\x89\xeb\nW\t\r5\x9f\xfb\x84\xb4\x87\xf9\x96\xb6\x11\xee?8\xcf\x95\xe5\x10\x9a\x12\xd8\xf1+\x8d\x92:\x80\xbdG\xac=]\xa7=Q\x94\x87\x8e!\x87}~\x10\x82F\x91\x1e?\x94\x89\xc1\x8d\x12\x87\xba\r\xf1\x1c3\x1a-F\x80\t\x06N\x07Q\xba\x15\xc0\xe4A\xbd[\xd4\xaaC\x14\x89\x9do\x0f\xbc>\x14\xc3\x8c\xcd'}, 'created by': 'BitTorrent/7350', 'encoding': 'UTF-8'}, 'number_of_pieces': 107, 'info': {'length': 1751391, 'piece length': 16384, 'name': '1999-12-31 18.20.09.jpg', 'pieces': '\xe4tyMx\x0eD]\xb6X@?M\xf0\x01\x8ca\xccF\x81\xd8\xdc\x19x\x80\xa4\x0fC\xd2|\x1a \xe4Q%"\xa4\x82\xc4YN\r\x1fg\x89\x14\x85\x87\x1bS~\x13\xe7w\x89\r\x1a\x80\xcdO&!<p\x83\xfeS\x16\x94\xb9f\x98\x8a\x88\xae\xab}\xe82\xac\xc2\x05\xd2\xf9{\xb1\x97#\xac\x80\xaa\xe5{\xad\xa5\x1a\x18\xabz \x18pj\x021+\xde\x03\t\x89~\xe0\x0e\xdf|,\xf3\xd0a\x18\xeb\xb6\xe7E\x8c\xa2Z@BK\x19.w*D\xc6\x1c\x8e\xc1N^\xcd\xcc \xf3\xce;\x84\xdc\t\xe2\'\xd6\xaa\xd7W\xed\x0f\xa0V\xba\xe2\xc4\xf7[W\xc9]\x88\xdfu\xfdZ\x1d\xfb\xdds\x8b(\n\xee=\xc5\x03w\xea9Dr\x1d\x16J\xe3\xc6?\x8c\xfe:\xa8G\xfe\xa7\xe1\xbb\xe8a3cZ\x8d\xd0\x15\x92C\x02\xa81\xa8K\xdcxu\\\x11s\xd4\x10\r\xcc\x15\xb3\x1c\xb5m\xce\x8a\xf9\xb7\xa3\x01J\x892\x857\xfe\xfa\x7f\x80o\x12\xcc;b\xd6\x02\x8eO\xa5L\xfe]\xfe):\x05\xc0\xaf\xa1t\xc0^\xe8F\xcf\xf9\x0eO\xe4#\xb8\x01\xd2\xa3\xa4\xbcQU\xc5\x14\xf3\xea\xcc\x9f\xb5\xcdS\xd7o\xca\xad\r\xa1\xaf\xcdsjr>o\x8cZ\x9f\xcec\x7fP\xcb\x99~87\xa0K\x08\x1f\xa6\x94\xf3R[\xd7\xa7I\x8ef\x89j\xf9ZR\xe2u\x89<\xc8\xeea\x08b\xa1\xb5dj\xac\x99B\x08u+q5\x119\xa3u\x95=Jj\xd5\xef\xc5\x0e\x8f(\xe0\xc60\xb9w\x97\x1f\xe6\x13mPUeA\xeb\x02\x1b\xec5\xa7\xae\xe9\x18\xa6\xfdI\xc0\xe2X\x87\x06\xec\x19B\xa5~\x9a~J\xabZC\xbb\n\xee\xe4\xd9\xd4=\x1e\xe37\x038?\x105X\xcf\x11t\x04\xe4\xd64\xd1P\xe0\x99\x8c\xdc\xe1\xc2\xbc\xd1\xe8\xc4|\xa26\xd52\xbdP\'\xb8W\t\xc3\xd1\xdd\xe2\xcf\x8ca\x1fX:(%u\t\x80mx1\r\xad\x1e:\xf6>\xc2^>\x83"\x0f\xefPm\xbd\xaeZ\xf7W\x01A\xca\x08*\x82\xde\xe1\x95\xf9\xe3C\\\xd0^\xe1E\xe4e\xce\xa9\xf4\xeb\x99\xc5B\xc2\xf0r\x98\xfc\xf6\xaf\x1a\xd7\xa7\xecZ\x89\x8f{\xa0m\xc2\xccBL\xaf\x11hv\x9f\x8bxZ\x90\x8f\xb8y\xf4{\xb39~\xe9esq\xfe\x9d*\xfc\x82\xa6\\\xc4\x10\xa0\xd6y\xa2\xfa<\xf2\xfd}\xa5R\xd5C}\x8a\x8a\xeb\xddd[=\xe3\x92\xb0\xb3\x9b\'\xfb\xc5\xf5B\xc6L\x08\xed\xe4-\xe4\x83u\xf2S\x99;Dc\x9f\x9e\x81\xfa\xb2\x02N\xf9z\xac\xe8\xe8*\xb2\xda*\xf1\xd80\x00p\x07zr\xfdw\x98=P\xfb\x9adN\xdc\x07\xd4\xe2\x8b}c\x18z9\x8f\\I=\xe3\xc2E\xcd\xf6\xea^7?\xdf\x1cZ\x83\x15f\xf3\x96\xcc\xedN\x8bM\x13\x96\xce\xdav\xb2\x81\xcb\x833c\x90w*=1\xb2\xad\xb6\xc1W0\t\x98\x05\xa4\t *b\xc8\xdc\xb7\xfdM\xc3S\x14\x9c\xc3\xde\xba9kv?a\xdbm\xc1\xb4\x80\tY\xbc\xd2\xcdz\xd1\xf4TB\xe0\x92\x96\xab\xb6\xd7\xd0\xa1Z\xa6\x9f\xa4\xf5\x0e\xc0]\x95*\xf0\x80\xaa=\x8dK\xe5\xab\xd6\x82\x88\xae\xef\x16\x8f\x92\x01\xf8\x00\t\xa7\x0f\xecG\xb4N\x98\x11\xf3\xd2\x15g\xa2L\x18\xfd\x91[\xccLs\x86\x1e\x13\x1b\x15\x16\xd9\xb0\xd4\x95\xe2\xdd\xec4\x19E\x13\x19\xe9\xecE3\x15\xff\xbf\xc1\x92\x03\xb5\xd4\x1f\xcdb\xa4\x0f\xc3\xf2,\xcc6(\x0e.\x08\xb8\xa9\xb6?\x94\x07\x07dj\xf6RL2M(\x0b\x0c\xf4W\'\xd8\x19I&-R9\x17\x86\x16\xe2\xe2\xb6*\x9d\x0e\xbd\x08\xd6\x83\x02\xaf*o\x8a\xa1h,E\x04\x95T\xe7\x17u\xdb\x08\xcd\x95\xef`\xcd\xa8\xdb\xb32\x91\x0c4\t\xaa\x9e\xc6\xa7\xd3\xceu\x90\x12\xbah\x80r\x97\x03Y\x8dfV\xf4\x95h\xc7\x00\x1a\xc2|\n\x03~]{j$f_\xeb\t\x12D=\xf1\xe9\xfa@\xfa\x99\xcf\xdf\tK"\x88\xcfh\x19\xe8XM\x9f\x84\xd3T\x11\x83\xad\xa8\xe2L\xb7\xd2\\%U\xb3\xf5\x91\x7f\x07\xff\xe1\xf2&\x85\xab@5\xbb\xa1K\x19w\xac\xd2\x83\x18C\x88n>V \xaaxR\xc6\xbb"XR\x0b\xfef\xc6\x90\x03O\n\x9a\xbd\xa3\xa3\x1d\xd5\x89\x15\x1at\x96\x10T\t\xeb\xac\xf4\x96\xf5\x85\x1bv*\x89\x99\x8b\xba\xacC\xa4\xf8\nd(gDk\xf8U\xe56\xd6\x84\x00q\xd9\xd3\xc3\x94\xf7\x9d!Q\x01\xf3\xc8P\x8cP\x96\xa1\xa3\x00\x81l\xca\xec\x94z\x17\x14\xf8\xa9\xfc\xd7\x8c\x02X\xa1\xee\xf5t\xd9\xda\xb4\x030&\xfe\xef\xd5\x7fJ\xbc*\x11\xc7(<\xe55\xfc\xf2\xde\xa3\xa7\xday#\xbb\xda\x84\xf6\x1a\xfe(\xc9\x05/+\x1f^G\xa4\x1ee\x17h\x9f]\x0ca\'M\xed\xdb\xb0\xb4DL\xb9`43\xb2\xbc\x8e%\x96\xa8s\x92(/\xbbb\x85\x98\xe2*E\x0f,\x03\xb8\x95\x8b\x83O\xc8#%\'t\xc0\x08O\xb3?F\xda\xf5\xc6\x81\xe3\xc0\x08\xc3r\x03u\xd6@\xf5r\xa4\xaaA\xbb\xd1\xf2\x9f0$\xb6\x85\x11\xab)\x02\xae{\x98H\xc6\xf7\x9d\x82g\xc2w\x15\x1b\xcc\x19\xc4/\xfc\xa2\x19Z\xf0\x02v\xdf1\xde\xd9\xe07\xfd\xd4\xd3\xc1l;vH\x01\xed:\xe3x\x9a\xc4U\xeei\xa1\xfe\x10\xf2\xbe?}C\xacPF\xd0et\xc1\x84\x13\xb1\'8\x96\xc4\x99\xcc6w\xc8\xfc\x80\x91\xa0\xca\xe918\xf2K\xe8\x9f\xb6\xe2\xf5\xf8-Ic\xe9\xde\x96\\$\x16\xa4\x96\\\x9f\x00\x18H-r\x0c\xf4-e\x9a\xbb\x81\x16\x01Ki\x9cs\xda %h|c\xb3\x8dL\x1d\xc4@!M\xcf-b\xb2\x13QH\xf0Q\xd4V\xa3\xbeyS\x92\xb5\xbfi\x96\xfd\x9d\xeb\xf8\r\x94G\xf8\xe6\x89\x12\xa7.\xef\r\x06\x18\xa7?:\x9a(o\xaa\xba\xc0\x08a\x92\x96\xb8Al/\xbb\xd6\xe3^\xc6{\xca\xb1\x98\xc7\xc4\xa5\x02\x1d\xbb\xd69O\xb5\xd0\xa4\xf4\x83\xcd[\xa7\xb5\x85g\x98\x03\xce\xda_W\xc4J\\}e8t\x03Ch\xde\xac\x8f\xe6\x88\x1b\xee\x9eg\x07\xe5;\x9b\xd3\xbc%\xa8\xe7\x19\xd39\xb4a\x92!\xaevJ\x00T\x1f\x9d)C\xa7\x1aF\x10\xf0E\xab\x04\x99\xcaf@p}\xaa\x9dz\x93\x84\xa8\x07\x1b\x82\xe9v\xd5\xfb\xe3D\xcd\xa9\xdbs\xc9\xc8t"<\x1b\xea\x89\xab\xe9\xb6\x02q\xc2h\x8d\x0f\xeb\xa8\t\t\xbc5\x0f:\xf32~\x13nm\x08\xc1]\xd5\x8a\xdfZ\xece8o\x8c\x90\xf5\x99\xb6\xd3J\x94D\xfe\xe1\xf0\xc1\x14\x19\x8fsc\xd1\xe7\x82?0u\xc5\x11\x16\x81\x8d\xa8+9\x03\xb33\xbb\xfb\x8f\xe8\x14\'\xb3\rg\xe2k\x118F\xba\x80\x8aWh\xcc\x8b\xe9%\x147\x1c?6r\xe1\x80\xa6`\xc8\xc8\xbeB\x94\xa1r\x1bA:sa\xa2\x98>\x11\xeelqw\x01\xe5\x04_]\xd0\x96\xd49\xbem\xe3\xb0B\x8c\x17\xb7\x84\x1b\xfeI\xfb\xeb\xc2\x0cj\x86\x96\xd4\xe1<\xd4\x9f\x95>:S\xdb>8\xb5[\xf0(\x8e hf\x81\t\xc3\xcd\xa2\xb2\xbaE\x8dh|\x08W-\xffKU\x13~\x16\x12G2\x82\x1c\x0ec\xa1\xe9\x1c\x99w\xf4)\xa4\x17e\x03+\xbd6\x9f\x86\x86\x8cC\xcbZ6QTk|\x0e\xa2(\xe2\xf3\x98\x17\xfb\xb8\x17\x9b\xdf\x07=\xe2Kj\xa9[\x81\xe7\xfc\x98DM\xbf\xe29\x82\x9b\x1b\x1b,\xa5\x08\xec!\x1aw\xd2V\x04\x85k\x94n\x04(0\xf6@\x91\x11\xc1\x96\xb9c\xf6~\xa2\x1d\x19\xc5\x11Q\xb8}\x03]\xff\x16\xfd\x95\xb8>9\x8c\xc0\xb2\xb1cj\xbfQ~\xfb\\/(ps\xec19\x02V\xf1M\xf7s\xd2\x99\x99\x96\xee^\x8d\xe1%\xa5w\xe3-\x1f\xa3\xcd{\xb0ar\x84\x12\xfa\xf4s\xf6\x17\x07\xb3f:c\x95\xedP\x1b\xa4\xa4\x06\x17\x0b\x08\x9d(ugO\xeep*\xf6\xa6\xb9\x11\x82\xe6\xe8\xa2LKXi!\x8e\x13\xa2{f7U\xdd\x80=@\xb9\x17v\x02\x86p\x96\x83\x07\xaf\xc0,M\xc2\x08\x8b\xbcUz\x0e\xa9\x88y\xc61\x9b\xa1m^5\x88\xb2\xdc\x94\x0fk/u\x05\xec\x0e\xbaXFL\x15\xa0\xbf\xc6\x13\x07\xf1J\xb9\xda,\xe9\\y\xdf\x96\xe3{D\xe3\xb3\xbb\xa0\x80\xa7\x80\x9aL)\x88f\x13\xdap6U\xc6\x89\xeb\nW\t\r5\x9f\xfb\x84\xb4\x87\xf9\x96\xb6\x11\xee?8\xcf\x95\xe5\x10\x9a\x12\xd8\xf1+\x8d\x92:\x80\xbdG\xac=]\xa7=Q\x94\x87\x8e!\x87}~\x10\x82F\x91\x1e?\x94\x89\xc1\x8d\x12\x87\xba\r\xf1\x1c3\x1a-F\x80\t\x06N\x07Q\xba\x15\xc0\xe4A\xbd[\xd4\xaaC\x14\x89\x9do\x0f\xbc>\x14\xc3\x8c\xcd'}, 'name': '1999-12-31 18.20.09.jpg', 'multiple_files': False, 'whole_blocks_per_piece': 1, 'length': 1751391, 'last_block_size': 0}
Same duplication issue
self.info bound the full set of attributes to your item in the form
of a dictionary, but you already had all the attributes bound
separately.

So originally, this info was included on the object three times!

Now we're down to just once:

>>> info.__dict__
{'comment': None, 'number_of_whole_blocks_in_whole_piece': 1, 'last_piece_size': 14687, 'last_block_size': 0, 'name': '1999-12-31 18.20.09.jpg', 'info_hash': <sha1 HASH object @ 0x10456bcb0>, 'encoding': 'UTF-8', 'multiple_files': False, 'piece_length': 16384, 'whole_blocks_per_piece': 1, 'created_by': 'BitTorrent/7350', 'creation_date': 1350689333, 'length': 1751391, 'private': 0, 'block_length': 16384, 'announce': 'http://thomasballinger.com:6969/announce', 'announce_list': None, 'pieces': '\xe4tyMx\x0eD]\xb6X@?M\xf0\x01\x8ca\xccF\x81\xd8\xdc\x19x\x80\xa4\x0fC\xd2|\x1a \xe4Q%"\xa4\x82\xc4YN\r\x1fg\x89\x14\x85\x87\x1bS~\x13\xe7w\x89\r\x1a\x80\xcdO&!<p\x83\xfeS\x16\x94\xb9f\x98\x8a\x88\xae\xab}\xe82\xac\xc2\x05\xd2\xf9{\xb1\x97#\xac\x80\xaa\xe5{\xad\xa5\x1a\x18\xabz \x18pj\x021+\xde\x03\t\x89~\xe0\x0e\xdf|,\xf3\xd0a\x18\xeb\xb6\xe7E\x8c\xa2Z@BK\x19.w*D\xc6\x1c\x8e\xc1N^\xcd\xcc \xf3\xce;\x84\xdc\t\xe2\'\xd6\xaa\xd7W\xed\x0f\xa0V\xba\xe2\xc4\xf7[W\xc9]\x88\xdfu\xfdZ\x1d\xfb\xdds\x8b(\n\xee=\xc5\x03w\xea9Dr\x1d\x16J\xe3\xc6?\x8c\xfe:\xa8G\xfe\xa7\xe1\xbb\xe8a3cZ\x8d\xd0\x15\x92C\x02\xa81\xa8K\xdcxu\\\x11s\xd4\x10\r\xcc\x15\xb3\x1c\xb5m\xce\x8a\xf9\xb7\xa3\x01J\x892\x857\xfe\xfa\x7f\x80o\x12\xcc;b\xd6\x02\x8eO\xa5L\xfe]\xfe):\x05\xc0\xaf\xa1t\xc0^\xe8F\xcf\xf9\x0eO\xe4#\xb8\x01\xd2\xa3\xa4\xbcQU\xc5\x14\xf3\xea\xcc\x9f\xb5\xcdS\xd7o\xca\xad\r\xa1\xaf\xcdsjr>o\x8cZ\x9f\xcec\x7fP\xcb\x99~87\xa0K\x08\x1f\xa6\x94\xf3R[\xd7\xa7I\x8ef\x89j\xf9ZR\xe2u\x89<\xc8\xeea\x08b\xa1\xb5dj\xac\x99B\x08u+q5\x119\xa3u\x95=Jj\xd5\xef\xc5\x0e\x8f(\xe0\xc60\xb9w\x97\x1f\xe6\x13mPUeA\xeb\x02\x1b\xec5\xa7\xae\xe9\x18\xa6\xfdI\xc0\xe2X\x87\x06\xec\x19B\xa5~\x9a~J\xabZC\xbb\n\xee\xe4\xd9\xd4=\x1e\xe37\x038?\x105X\xcf\x11t\x04\xe4\xd64\xd1P\xe0\x99\x8c\xdc\xe1\xc2\xbc\xd1\xe8\xc4|\xa26\xd52\xbdP\'\xb8W\t\xc3\xd1\xdd\xe2\xcf\x8ca\x1fX:(%u\t\x80mx1\r\xad\x1e:\xf6>\xc2^>\x83"\x0f\xefPm\xbd\xaeZ\xf7W\x01A\xca\x08*\x82\xde\xe1\x95\xf9\xe3C\\\xd0^\xe1E\xe4e\xce\xa9\xf4\xeb\x99\xc5B\xc2\xf0r\x98\xfc\xf6\xaf\x1a\xd7\xa7\xecZ\x89\x8f{\xa0m\xc2\xccBL\xaf\x11hv\x9f\x8bxZ\x90\x8f\xb8y\xf4{\xb39~\xe9esq\xfe\x9d*\xfc\x82\xa6\\\xc4\x10\xa0\xd6y\xa2\xfa<\xf2\xfd}\xa5R\xd5C}\x8a\x8a\xeb\xddd[=\xe3\x92\xb0\xb3\x9b\'\xfb\xc5\xf5B\xc6L\x08\xed\xe4-\xe4\x83u\xf2S\x99;Dc\x9f\x9e\x81\xfa\xb2\x02N\xf9z\xac\xe8\xe8*\xb2\xda*\xf1\xd80\x00p\x07zr\xfdw\x98=P\xfb\x9adN\xdc\x07\xd4\xe2\x8b}c\x18z9\x8f\\I=\xe3\xc2E\xcd\xf6\xea^7?\xdf\x1cZ\x83\x15f\xf3\x96\xcc\xedN\x8bM\x13\x96\xce\xdav\xb2\x81\xcb\x833c\x90w*=1\xb2\xad\xb6\xc1W0\t\x98\x05\xa4\t *b\xc8\xdc\xb7\xfdM\xc3S\x14\x9c\xc3\xde\xba9kv?a\xdbm\xc1\xb4\x80\tY\xbc\xd2\xcdz\xd1\xf4TB\xe0\x92\x96\xab\xb6\xd7\xd0\xa1Z\xa6\x9f\xa4\xf5\x0e\xc0]\x95*\xf0\x80\xaa=\x8dK\xe5\xab\xd6\x82\x88\xae\xef\x16\x8f\x92\x01\xf8\x00\t\xa7\x0f\xecG\xb4N\x98\x11\xf3\xd2\x15g\xa2L\x18\xfd\x91[\xccLs\x86\x1e\x13\x1b\x15\x16\xd9\xb0\xd4\x95\xe2\xdd\xec4\x19E\x13\x19\xe9\xecE3\x15\xff\xbf\xc1\x92\x03\xb5\xd4\x1f\xcdb\xa4\x0f\xc3\xf2,\xcc6(\x0e.\x08\xb8\xa9\xb6?\x94\x07\x07dj\xf6RL2M(\x0b\x0c\xf4W\'\xd8\x19I&-R9\x17\x86\x16\xe2\xe2\xb6*\x9d\x0e\xbd\x08\xd6\x83\x02\xaf*o\x8a\xa1h,E\x04\x95T\xe7\x17u\xdb\x08\xcd\x95\xef`\xcd\xa8\xdb\xb32\x91\x0c4\t\xaa\x9e\xc6\xa7\xd3\xceu\x90\x12\xbah\x80r\x97\x03Y\x8dfV\xf4\x95h\xc7\x00\x1a\xc2|\n\x03~]{j$f_\xeb\t\x12D=\xf1\xe9\xfa@\xfa\x99\xcf\xdf\tK"\x88\xcfh\x19\xe8XM\x9f\x84\xd3T\x11\x83\xad\xa8\xe2L\xb7\xd2\\%U\xb3\xf5\x91\x7f\x07\xff\xe1\xf2&\x85\xab@5\xbb\xa1K\x19w\xac\xd2\x83\x18C\x88n>V \xaaxR\xc6\xbb"XR\x0b\xfef\xc6\x90\x03O\n\x9a\xbd\xa3\xa3\x1d\xd5\x89\x15\x1at\x96\x10T\t\xeb\xac\xf4\x96\xf5\x85\x1bv*\x89\x99\x8b\xba\xacC\xa4\xf8\nd(gDk\xf8U\xe56\xd6\x84\x00q\xd9\xd3\xc3\x94\xf7\x9d!Q\x01\xf3\xc8P\x8cP\x96\xa1\xa3\x00\x81l\xca\xec\x94z\x17\x14\xf8\xa9\xfc\xd7\x8c\x02X\xa1\xee\xf5t\xd9\xda\xb4\x030&\xfe\xef\xd5\x7fJ\xbc*\x11\xc7(<\xe55\xfc\xf2\xde\xa3\xa7\xday#\xbb\xda\x84\xf6\x1a\xfe(\xc9\x05/+\x1f^G\xa4\x1ee\x17h\x9f]\x0ca\'M\xed\xdb\xb0\xb4DL\xb9`43\xb2\xbc\x8e%\x96\xa8s\x92(/\xbbb\x85\x98\xe2*E\x0f,\x03\xb8\x95\x8b\x83O\xc8#%\'t\xc0\x08O\xb3?F\xda\xf5\xc6\x81\xe3\xc0\x08\xc3r\x03u\xd6@\xf5r\xa4\xaaA\xbb\xd1\xf2\x9f0$\xb6\x85\x11\xab)\x02\xae{\x98H\xc6\xf7\x9d\x82g\xc2w\x15\x1b\xcc\x19\xc4/\xfc\xa2\x19Z\xf0\x02v\xdf1\xde\xd9\xe07\xfd\xd4\xd3\xc1l;vH\x01\xed:\xe3x\x9a\xc4U\xeei\xa1\xfe\x10\xf2\xbe?}C\xacPF\xd0et\xc1\x84\x13\xb1\'8\x96\xc4\x99\xcc6w\xc8\xfc\x80\x91\xa0\xca\xe918\xf2K\xe8\x9f\xb6\xe2\xf5\xf8-Ic\xe9\xde\x96\\$\x16\xa4\x96\\\x9f\x00\x18H-r\x0c\xf4-e\x9a\xbb\x81\x16\x01Ki\x9cs\xda %h|c\xb3\x8dL\x1d\xc4@!M\xcf-b\xb2\x13QH\xf0Q\xd4V\xa3\xbeyS\x92\xb5\xbfi\x96\xfd\x9d\xeb\xf8\r\x94G\xf8\xe6\x89\x12\xa7.\xef\r\x06\x18\xa7?:\x9a(o\xaa\xba\xc0\x08a\x92\x96\xb8Al/\xbb\xd6\xe3^\xc6{\xca\xb1\x98\xc7\xc4\xa5\x02\x1d\xbb\xd69O\xb5\xd0\xa4\xf4\x83\xcd[\xa7\xb5\x85g\x98\x03\xce\xda_W\xc4J\\}e8t\x03Ch\xde\xac\x8f\xe6\x88\x1b\xee\x9eg\x07\xe5;\x9b\xd3\xbc%\xa8\xe7\x19\xd39\xb4a\x92!\xaevJ\x00T\x1f\x9d)C\xa7\x1aF\x10\xf0E\xab\x04\x99\xcaf@p}\xaa\x9dz\x93\x84\xa8\x07\x1b\x82\xe9v\xd5\xfb\xe3D\xcd\xa9\xdbs\xc9\xc8t"<\x1b\xea\x89\xab\xe9\xb6\x02q\xc2h\x8d\x0f\xeb\xa8\t\t\xbc5\x0f:\xf32~\x13nm\x08\xc1]\xd5\x8a\xdfZ\xece8o\x8c\x90\xf5\x99\xb6\xd3J\x94D\xfe\xe1\xf0\xc1\x14\x19\x8fsc\xd1\xe7\x82?0u\xc5\x11\x16\x81\x8d\xa8+9\x03\xb33\xbb\xfb\x8f\xe8\x14\'\xb3\rg\xe2k\x118F\xba\x80\x8aWh\xcc\x8b\xe9%\x147\x1c?6r\xe1\x80\xa6`\xc8\xc8\xbeB\x94\xa1r\x1bA:sa\xa2\x98>\x11\xeelqw\x01\xe5\x04_]\xd0\x96\xd49\xbem\xe3\xb0B\x8c\x17\xb7\x84\x1b\xfeI\xfb\xeb\xc2\x0cj\x86\x96\xd4\xe1<\xd4\x9f\x95>:S\xdb>8\xb5[\xf0(\x8e hf\x81\t\xc3\xcd\xa2\xb2\xbaE\x8dh|\x08W-\xffKU\x13~\x16\x12G2\x82\x1c\x0ec\xa1\xe9\x1c\x99w\xf4)\xa4\x17e\x03+\xbd6\x9f\x86\x86\x8cC\xcbZ6QTk|\x0e\xa2(\xe2\xf3\x98\x17\xfb\xb8\x17\x9b\xdf\x07=\xe2Kj\xa9[\x81\xe7\xfc\x98DM\xbf\xe29\x82\x9b\x1b\x1b,\xa5\x08\xec!\x1aw\xd2V\x04\x85k\x94n\x04(0\xf6@\x91\x11\xc1\x96\xb9c\xf6~\xa2\x1d\x19\xc5\x11Q\xb8}\x03]\xff\x16\xfd\x95\xb8>9\x8c\xc0\xb2\xb1cj\xbfQ~\xfb\\/(ps\xec19\x02V\xf1M\xf7s\xd2\x99\x99\x96\xee^\x8d\xe1%\xa5w\xe3-\x1f\xa3\xcd{\xb0ar\x84\x12\xfa\xf4s\xf6\x17\x07\xb3f:c\x95\xedP\x1b\xa4\xa4\x06\x17\x0b\x08\x9d(ugO\xeep*\xf6\xa6\xb9\x11\x82\xe6\xe8\xa2LKXi!\x8e\x13\xa2{f7U\xdd\x80=@\xb9\x17v\x02\x86p\x96\x83\x07\xaf\xc0,M\xc2\x08\x8b\xbcUz\x0e\xa9\x88y\xc61\x9b\xa1m^5\x88\xb2\xdc\x94\x0fk/u\x05\xec\x0e\xbaXFL\x15\xa0\xbf\xc6\x13\x07\xf1J\xb9\xda,\xe9\\y\xdf\x96\xe3{D\xe3\xb3\xbb\xa0\x80\xa7\x80\x9aL)\x88f\x13\xdap6U\xc6\x89\xeb\nW\t\r5\x9f\xfb\x84\xb4\x87\xf9\x96\xb6\x11\xee?8\xcf\x95\xe5\x10\x9a\x12\xd8\xf1+\x8d\x92:\x80\xbdG\xac=]\xa7=Q\x94\x87\x8e!\x87}~\x10\x82F\x91\x1e?\x94\x89\xc1\x8d\x12\x87\xba\r\xf1\x1c3\x1a-F\x80\t\x06N\x07Q\xba\x15\xc0\xe4A\xbd[\xd4\xaaC\x14\x89\x9do\x0f\xbc>\x14\xc3\x8c\xcd', 'number_of_pieces': 107, 'number_of_whole_pieces': 106}
same thing with 'file'
Use triple quotes only for docstrings.
You don't want this comment to be the docstring for the __init__
function.  Anyway, you already have a docstring for the object.
forgot to change this yesterday