我想從class A另一個內部呼叫一個函式class B。但是,應該為 的物件呼叫它A。我的意思是,如果我有這樣的事情:
class A:
def __init__(self, ....):
self.valuechanged=False
# do something
objectfromb=B()
self.somearray.append(objectfromb)
def updateevent(self):
self.valuechanged=True
# do some things if update event triggered
class B:
def __init__(self,...):
self.somevalue=0
self.someothervalue=1
# do something
def updatesomevalue(self,somenewvalue):
self.somevalue=somenewvalue
# !!! HERE SHOULD BE A CALL TO CLASS A FUNCTION updateevent
在我的代碼中,我使用這樣的類:
a=A()
然后我會在 ( a.somearray) 中有一個串列 somearray ,其中包含B. 因此,如果我想使用以下內容更新此物件B:
a.somearray[0].updatesomevalue(10)
那么不僅應該有一個新的值,a.somearray[0].somevalue而且類的函式更新事件A應該觸發改變a。我怎樣才能做到這一點?
uj5u.com熱心網友回復:
在不呼叫任何特殊魔法的情況下,我可以想到兩種方法來實作這一點。
首先是讓型別的物件B知道A它們屬于哪個物件,以便它們可以呼叫updateevent它。這不是我通常喜歡的一種方式,因為在諸如此類的實體B之間移動實體時需要做額外的管理作業A。如果這不是問題,那么這可能是最好的方法。你會這樣做(為方便起見,使用方法A來創建B并設定正確的父級):
class A:
valuechanged=False
somearray=[]
def add_b(self):
b = B(self)
somearray.append(b)
return b
def updateevent(self):
self.valuechanged=True
class B:
somevalue=0
someothervalue=1
def __init__(self, parent):
self.parent = parent
def updatesomevalue(self,somenewvalue):
self.somevalue=somenewvalue
self.parent.updateevent()
第二個是在 A 上提供一個同時完成這兩項任務的方法。這僅適用于 1) 您知道A將始終包含Band only B的實體并且 2)B的介面相對較小(以避免在 上提供大量此類方法A)。您可以將其實作為:
class A:
valuechanged=False
somearray=[]
def updatesomevalue(self, index, new_value):
somearray[index].updatesomevalue(new_value)
self.updateevent()
def updateevent(self):
self.valuechanged=True
class B:
somevalue=0
someothervalue=1
def updatesomevalue(self,somenewvalue):
self.somevalue=somenewvalue
我沒有解決的問題是 ,somearray等都somevalue在您的示例中被創建為類屬性(即它們將在所有實體之間共享,而不是每個實體都有自己的實體)。這可能不是您想要的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/413703.html
標籤:
