假設我有:BaseObjects我們將在下面調用 A 包項目 B 作為依賴項安裝BaseObjects并為中定義的某些類定義子類BaseOjects項目 C 作為依賴項安裝BaseObjects,但無法以任何方式訪問項目 BBaseObjects讓我們調用:中定義的類之一Point。另一個類被稱為Line以 2 個Point實例p1和 為屬性p2。包 B 實現了一個類PointB(Point)。因此,對象PointB也是 的實例BaseObjects.Point。在與項目 B 相關的環境中,我創建了一個Line使用 2 個PointB對象的對象。我使用實現的特殊方法執行各種操作PointB。我現在想要腌制這個Line對象,以便可以將其加載到項目 C 中。為此,我無法保留PointB實例。因此,我需要將它們“重新分類”為僅超類的類型。我愿意p1.__class__ = Point并且p2.__class__ = Point。我檢查:isinstance(p1, PointB)計算結果為False,對于 也相同p2。因此,我認為以這種方式腌制的對象可以從項目 C 中讀取,因為它具有BaseObjects定義類的依賴項Point。事實并非如此。當我在項目 C 中加載 pickle 文件時,它會查找我在項目 B 中定義子類的文件夾。但是,當我深入研究該對象時,我沒有找到任何鏈接。所有對象都被稱為類型BaseObjects.<class_name>在我擺脫該對象對項目 B 的依賴的過程中出了什么問題?有沒有辦法查看對象的所有依賴關系?
1 回答

慕的地6264312
TA貢獻1817條經驗 獲得超6個贊
經過幾個小時的額外研究這個問題后,我在問題中描述的內容非常有效。我的問題出現在一個更復雜的對象中,其中許多屬性引用了許多其他類。這些屬性之一保持了依賴性。這不是問題,但從中學到了很多東西!
確定問題是否來自剩余依賴性的一個好方法是實現問題中描述的內容。一些極其簡單的對象以盡可能簡單的方式相互關聯。如果這個簡單的例子不起作用,那么問題就來自其他地方。如果它有效,則意味著您嘗試加載的對象中存在依賴項。
添加回答
舉報
0/150
提交
取消