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
remove magic number
clarifying comments