Data オブジェクト自体のタイムスタンプへの参照が必要になります。オブジェクト間に暗黙の「所有権」はありません。それらは明示的にリンクされているため (通常は、あるオブジェクトに別のオブジェクトへの参照を与えることによって) のみリンクされています。以下に 2 つの方法を示します。
まず、Log オブジェクトへの参照を追加して...
class Data(object):
def __init__(self, log, index):
self.log = log
self.index = index
self.val = random.random()
@property
def timestamp(self):
return self.log.timestamp
class Log(object):
def __init__(self):
self.timestamp = '09:50'
self.data = []
for i in range(0, 20, 5):
self.data.append(Data(self, i))
def get_timestamp_from_data(data):
return data.timestamp
...そして、タイムスタンプを Data オブジェクトにコピーする別のもの...
class Data(object):
def __init__(self, index, timestamp):
self.index = index
self.timestamp = timestamp
self.val = random.random()
class Log(object):
def __init__(self):
self.timestamp = '09:50'
self.data = []
for i in range(0, 20, 5):
self.data.append(Data(self.timestamp, i))
def get_timestamp_from_data(data):
return data.timestamp
どちらを使用するか (そして、他の方法があると確信しています) はあなた次第です。何らかの理由でログのタイムスタンプが変更された場合、最初の例ではデータのタイムスタンプが変更されていることが示されますが、2 番目の例ではそうではありません...
log = Log()
cur_data = log.data[2]
print(log.timestamp) # Prints '09:50'
log.timestamp = '10:00'
print(log.timestamp) # Prints '10:00'
print(cur_data.timestamp)
データはログからの参照から取得されるため、提供した最初のサンプルを使用すると、この最後の行に「10:00」と出力されます。2 番目の方法を使用して実装すると、ログ オブジェクトの作成時にタイムスタンプが「コピー」されたため、「9:50」と出力されます。この場合、Data オブジェクトには独自のタイムスタンプのコピーが含まれます。