On 2013-02-10 22:44, ISE Development wrote:
Is it considered acceptable practice (e.g. not confusing, not
surprising or not Pythonic) to allow multiple ways to access
the same attributes?

For example, supposing I am providing access to external
devices, that these parameters may vary slightly between
devices (e.g. different models, etc...) and that the device
may be queried for parameter meta-data (such as name, data
type, data value constraints), would the following API be
acceptable (in the sense alluded to above)? Or would it be
generally considered a distortion of Python idealogy (e.g.
like PERL's 'more than one way to do it' approach)?

class option
   -> represents a single option
   -> two attributes: info  (the parameter meta-data)
                      value (the parameter getsetter)

class options:
   -> represents the device parameter interface
   -> provides the following API:

iter(options)
   -> iterable through all parameter meta-data

options[0]
   -> access parameter 0 meta-data
   -> key is integer

options['foo']
   -> access parameter 'foo' (returns an 'option' object)
   -> key is basestring
   -> useful when processing the parameters generically

options.foo
   -> same as options['foo']
   -> useful for well-known, often used parameters
      (really just short-hand for the user)

options.keys()
   -> iterator through option names (a specific meta-data
      field)

options.values()
   -> iterator through option values

options.items()
   -> iterator through (name,value) tuples

These features make it look like a dict: options['foo'],
options.keys(), options.values(), options.items(). OK so far.

What does iter(options) yield? If the class looks like a dict, it
should probably behave like a dict, yielding the keys.

I'm not sure about options[0]. Would that be the same as
list(options.values())[0]? A dict would treat that in the same way as
options['foo'] i.e. the 0 is a key. -1 for that.

options.foo is a 'magic' attribute; it may or may not exist. -1 for
that.

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to