長時間監聽,第一次調用者。Python:跨模塊和外殼共享對象
我有一個高層次的設計問題,這可能是過於籠統,但這裏有: 目前,我已經寫了一個體面大小的模塊集。我通過編寫調用模塊的長腳本來使用它們。我需要重構,以使其更具互動性;而不是依靠長腳本,想要從shell調用函數和修改對象實例。
問題:需要在所有模塊和shell之間共享對象實例。
當前,只是創建了一個包含對象實例初始化的模塊,其他所有模塊都從該「工作空間」模塊導入了共享實例。我認爲必須有一個更優雅的方式來做到這一點;有什麼建議麼?
P.S.最初,使用了對象方法,但在與一位真正的程序員(我是一個機械人)交談之後,他建議我只使用對象作爲屬性的容器,並分別分解這些方法。
編輯:更改示例代碼以包含多個實例&刪除多餘的文件夾/文件。
注意:對象方法與單獨的方法問題很有趣,但這裏的主要問題是從模塊和shell中訪問實例。
嘗試在一個簡單的概括例如:
(免責聲明:這是廢話代碼,只是想在一般的顯示問題,我試圖解決的類型,即都是由調用方法修改對象實例。並通過直接從殼改變屬性)
===== folder structure =====
dev/init.py
dev/bike.py
dev/car.py
dev/workspace.py
===== init.py ======
from workspace import *
import bike
import car
===== workspace.py =====
class Bike:
pass
class Car:
pass
b = [Bike(), Bike()]
c = Car()
===== bike.py =====
from workspace import *
def start():
b[0].x = 6
b[1].x = 9
def move():
b[0].x += 1
b[1].x += 1.2
def distance():
print(b[0].x-c.x)
===== car.py =====
from workspace import *
def start():
c.x = 0
def move():
c.x += 2
def brake(bike_instance):
if bike_instance.x - c.x < 2:
c.x = 0
實例:
$ python init.py -i
>>> bike.start()
>>> car.start()
>>> bike.move()
>>> car.move()
>>> car.move()
>>> car.move()
>>> bike.distance()
>>> car.brake(b[0])
>>> car.brake(b[1])
>>> c.x = 5
也許這是你可以用鹹菜來解決的問題?即添加一個包裝器/裝飾器,以便在進入一個函數時加載和取消對象,並且在退出時再次清理並再次存儲它?(方法相同) – nvlass
如果我正確理解你的問題,我很好奇:你的程序員朋友對他們的相應類中有相關方法有什麼反對?如果一個函數是一個類方法是有意義的,那麼你絕對應該這樣做。 – Natan
是否有一個原因,你特別只想在那裏有每個模塊中的每個類的單個實例?你從不想要兩輛車? – jdi