我正在編寫一個程序,它由一個「主」對象組成,它跟蹤並操縱許多較小的對象。這裏是一個簡化的例子:如何訪問另一個對象內的對象的方法
class My_obj:
def __init__(self, a):
self.a = a
def set_a(self, a):
self.a = a
def get_a(self):
return self.a
class Master:
def __init__(self, list_):
self.obj_list = []
for value in list_:
obj = My_obj(value)
self.obj_list.append(obj)
m = Master([0, 1, 2])
# How do I get (or set) the value of <a> from one of the My_obj instances
# within the new Master object?
我知道兩種方法來做到這一點。首先是要添加到Master
一個方法,返回所請求的對象:
def get_obj(self, index):
return self.obj_list[index]
然後我可以直接調用任何方法的對象。但是,這看起來很危險:如果後面的代碼刪除了返回的對象,然後Master
中的某些內容試圖查找它,程序就會崩潰。
編輯: 原來,它不會崩潰,但仍然是一個問題;看評論。
第二種方法是將帶包裝的相應方法每種方法在Master
:
def set_a(self, index, a):
self.obj_list[index].set_a(a)
def get_a(self, index):
return self.obj_list[index].get_a()
這似乎是多餘的,而且會得到相當繁瑣的更復雜的情形。
有誰知道更好的方法來訪問這些方法?
「如果後續代碼刪除返回的對象,然後Master中的某些東西試圖查找它?那不可能真的發生。 Master對象仍然有對返回對象的引用,所以它不會被刪除。 – matt
以簡單的方式做到這一點,如果您遇到問題,請稍後重構。 – monkut
你已經提供了2種方法。我想你只是想要一個「安全」的方式來做到這一點?爲什麼你覺得第二種方式是多餘的?它不是非常詳細的imo .. – nave