Structure accessible by attribute name or index
Bruno Desthuilliers
bruno.42.desthuilliers at websiteburo.invalid
Wed Mar 17 11:34:33 EDT 2010
Wes Santee a écrit :
> I am very new to Python, and trying to figure out how to create an
> object that has values that are accessible either by attribute name,
> or by index. For example, the way os.stat() returns a stat_result or
> pwd.getpwnam() returns a struct_passwd.
>
> In trying to figure it out, I've only come across C implementations of
> the above types. Nothing specifically in Python. What is the Python
> native way to create this kind of object?
Using the appropriate __magicmethods__ for indexed access and computed
attributes for the attribute access might be a good solution:
# warning : Q&D implementation, would require some sanity checks.
class IndexedValueDescriptor(object):
def __init__(self, index):
self._index = index
def __get__(self, instance, cls):
if instance is None:
return self
return instance[self._index]
def __set__(self, instance, value):
instance[self._index] = value
class Structure(object):
def __init__(self, value1, value2, value3):
self._values = [value1, value2, value3]
def __setitem__(self, index, value):
self._values[index] = value
def __getitem__(self, index):
return self._values[index]
value1 = IndexedValueDescriptor(0)
value2 = IndexedValueDescriptor(1)
value3 = IndexedValueDescriptor(2)
Note that there are probably other solutions... Don't know how
os.stat_result is implemented, might be worth looking at the source
code. But anyway : the above should get you started.
> I apologize if this has been widely covered already. In searching for
> an answer, I must be missing some fundamental concept that is
> excluding me from finding an answer.
Well, that's not really a FAQ AFAICT !-)
More information about the Python-list
mailing list