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
