У меня есть класс, в котором я храню данные в списке по причинам наследования. Я хотел бы знать, и я сделал свою долю поиска в Google, есть ли более чистый способ, кроме создания функций и свойств getter/setter, чтобы дать псевдоним элементу в этом списке?
Например...
class Serializable(object):
"""Adds serialization to from binary string"""
def encode(self):
"""Pack into struct"""
return self.encoder.pack(*self)
def decode(self, data_str):
"""Unpack from struct"""
self.data = self.encoder.unpack(data_str)
return self.data
class Ping(Serializable):
encoder = Struct("!16sBBBL")
def __init__(self, ident=create_id(), ttl=TTL, hops=0, length=0):
self.data = [ident, 1, ttl, hops, length]
self.ident = property(self.data[0])
def __getitem__(self, index):
return self.data[index]
@property
def ident(self):
return self.data[0]
@ident.setter
def ident(self, value):
self.data[0] = value
@property
def protocol(self):
return self.data[1]
@protocol.setter
def protocol(self, protocol):
self.data[1]
Я бы предпочел более компактное решение для ссылки на object.ident, сохраняя при этом возможность упаковывать и распаковывать, как указано выше.
create_id
в определении метода — эта функция будет вызываться только один раз при разборе класса, а не при каждом вызове метода__init__
. - person jsbueno   schedule 24.01.2012