如何根據另一個實例更新實例變量? 有沒有辦法在Python中的對象之間獲得多對多的依賴關係?Python依賴關係:用於訪問另一個實例變量的類方法
- Deptest是其可以是在線或離線的一類,並且它具有所謂的「相關性」的字典實例變量是像這樣設置{「CONDITION STRING」:instance.instancevariable ==值}
- S1和S2是Deptest的實例
- S1要求S2在線以便進行在線
- 如果按下UP,則檢查S1的依賴關係。如果他們符合,S1現在在線。
- 如果按下DOWN,則會檢查S2的相關性。由於它沒有,它是在網上。
發生了什麼: - S1的在線定義從不改變其初始值。我不知道爲什麼,因爲它被稱爲每個週期更新。
注意:S1可能依賴於來自s2的多個屬性,或者甚至可能依賴於S3,s4,基本上是任意數量的依賴關係。
這是我到目前爲止已經試過:
import pygame
from pygame.locals import *
pygame.init()
class deptest():
def __init__(self,name):
self.name = name
self.status = ""
self.dependencies = {}
def updatestatus(self):
if self.checkdependencies():
self.status = "ONLINE"
else:
self.status = "OFFLINE"
def checkdependencies(self):
if self.dependencies:
for dv in self.dependencies.values():
dv=dv
if not all(dv for dv in self.dependencies.values()):
print("{}: Still waiting".format(self.name))
for ds,dv in self.dependencies.items():
print("{}: {}".format(ds,dv))
return False
else:
print("{}: Good to go".format(self.name))
return True
else:
print("{}: Good to go".format(self.name))
return True
s1 = deptest("s1")
s2 = deptest("s2")
s1.dependencies = {"S2 ONLINE":s2.status == "ONLINE"}
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
if event.type == KEYDOWN:
if event.key == pygame.K_UP:
print("PRESSED UP")
if s1.checkdependencies():
s1.status = "ONLINE"
if event.key == pygame.K_DOWN:
print("PRESSED DOWN")
if s2.checkdependencies():
s2.status = "ONLINE"
for s in [s1,s2]:
s.updatestatus()
pygame.quit()
sys.exit()
這是我關於類和實例是如何工作的一部分的誤解?
編輯:環顧一下,我認爲這可能是'觀察者'的設計模式。 編輯:或者也許'調解員' - 我不太確定。
這總是錯誤的s1.dependencies = {「S2 ONLINE」:s2.status ==「ONLINE」}'你是否期望它翻轉爲'True'? – salparadise
是的,當s2.status更新爲「ONLINE」時。這是我想的關鍵。 – Metalgearmaycry