On Thursday 28 April 2016 13:23, Ben Finney wrote: > Christopher Reimer <christopher_rei...@icloud.com> writes: > >> In short, my original code before I turned it into a separate >> dictionary. *sigh* > > No, I think that misses the points that were being made. The discussion > you're talking about was *not* to say “attribute access is better than > dictionary access”, or vice versa. Each is good for its purpose. > > Rather, the discussion was to drive home the point that in Python those > are *two distinct concepts*, and you need to not conflate them. > > If you want items in a mapping, explicitly use a Python ‘dict’ instance. > If you want attributes that describe an object, explicitly use > attributes of that object. Deliberately choose which one makes more > sense.
Think of it like this: attribute access is for accessing parts of a thing: dog.tail car.engine cup.handle or one of a small number of fixed fields from a record: employment_record.start_date employee.salary autopsy.cause_of_death person.title Mappings (dicts) are for recording a potentially unlimited number of distinct records with arbitrary keys, especially since the keys don't have to be valid identifiers: employees['Fred Smith'] students['Joanna McTavish'] prisoners[12345] catalog['Widgets']['GMH-12345'] dictionary['update'] While Python allows you to write code to use attribute syntax for item access, doing so is a category mistake and leads to semantic confusion and potential bugs: employees.Fred_Smith students.Joanna_McTavish prisoners.P12345 parts.widgets.GMH_12345 dictionary.update The last example shows how mixing up these two distinct concepts can lead to problems. Should dictionary.update refer to the update method, or the entry for the word "update"? -- Steve -- https://mail.python.org/mailman/listinfo/python-list