您將需要一些對數據對象本身的時間戳的引用。對象之間沒有隱含的「所有權」。他們只是聯繫在一起,因爲你明確這樣做(通常通過給一個對象引用另一個對象)。這裏有兩種方法:
首先,通過向登錄對象的引用...
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
...和另一種,其拷貝中的時間戳到數據對象...
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()
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對象將包含它自己的時間戳的副本。
Python中沒有對象所有權的概念。每個參考都是平等的。你爲什麼認爲你需要這個? – delnan 2013-03-11 17:36:01
您的示例似乎與您的問題沒有關係。 'get_timestamp_from_data'是否需要訪問'log'?爲什麼你不能只傳遞'log',或者把它關閉? – 2013-03-11 17:36:31
或者你可以'收集'上層課堂中的所有對象。 [Link] [1] [1]:http://stackoverflow.com/a/9460070/2153744 – aronadaal 2013-03-11 17:47:34