我正在编写一个由“主”对象组成的程序,该对象可以跟踪和操作许多较小的对象。这是一个简化的例子:
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()
这似乎是多余的,在更复杂的情况下会变得相当乏味。
有没有人知道更好的方法来访问这些方法?
答案 0 :(得分:1)
print m.obj_list[0].get_a() # prints 0
m.obj_list[0].set_a(5)
print m.obj_list[0].get_a() # prints 5
# access all the "a"'s
a_s = [o.get_a() for o in m.obj_list]