我有一個字典(從經由PyMongo MongoDB數據庫推出)的形式的數據,如:模式的延遲加載與Python
car = {_id: "1", "color": "silver", "steering_wheel":"2"}
其中「steering_wheel」的值是另一個文檔的ID在我的數據庫代表了SteeringWheel類的一個實例。從數據庫加載到Python將導致:
steering_wheel = {_id: "2", "cover": "plastic"}
要處理數據,我使用Python類。現在,我的問題是關於延遲加載。我能想到的方法有兩種:
1)保持引用的ID,並創建另一個運行時只attribut直接訪問引用的對象:
class Car(object):
def __init__(self, _id, color, steering_wheel_ref_id, session):
self._id = _id
self.color = color
self.steering_wheel_ref_id = steering_wheel_ref_id
self.session = session
@property
def steering_wheel(self):
try:
return self.steering_wheel
except AttributeError:
# Get the referecend object from the session
self.steering_wheel = self.session.resolve_item_refs(self.steering_wheel_ref_id)
return self.steering_wheel
2)另一種選擇是進行類型檢查:
class Car(object):
def __init__(self, _id, color, steering_wheel, session):
self._id = _id
self.color = color
self.steering_wheel = steering_wheel
self.session = session
@property
def steering_wheel(self):
if isinstance(self.steering_wheel, SteeringWheel):
return self.steering_wheel
else:
# Get the referecend object from the session
self.steering_wheel = self.session.resolve_item_refs(self.steering_wheel_ref_id)
return self.steering_wheel
您更喜歡哪種方式?或者有沒有更好的方法/最佳實踐來解決id訪問引用?
只要確保不要爲屬性和實例屬性使用相同的名稱,否則會出現一些遞歸問題。 – 2011-04-27 17:10:44