Multiple ways to access attributes

MRAB python at mrabarnett.plus.com
Mon Feb 11 00:23:30 CET 2013


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.




More information about the Python-list mailing list