您将需要对 Data 对象本身中的时间戳进行一些引用。对象之间没有隐含的“所有权”。它们只是链接在一起,因为您明确地这样做(通常是通过给一个对象一个对另一个对象的引用)。这里有两种方法:
首先,通过添加对 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
您使用哪种(我相信还有其他方法)取决于您。请注意,如果 Log 中的时间戳因任何原因发生更改,第一个示例将显示数据中的时间戳更改,但在第二个示例中,它不会...
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”,因为数据是从日志中的引用中检索的。如果您使用第二种方式实现,您将打印“9:50”,因为时间戳是在创建时从日志对象“复制”的。在这种情况下,Data 对象将包含其自己的时间戳的副本。