如何访问另一个对象中对象的方法

2024-03-29 11:40:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个程序,它由一个“主”对象组成,它跟踪并操纵许多较小的对象。下面是一个简化的示例:

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()

这似乎是多余的,而且在更复杂的场景中会变得相当乏味。你知道吗

有人知道更好的方法来访问这些方法吗?你知道吗


Tags: the对象方法self程序masterobjget
1条回答
网友
1楼 · 发布于 2024-03-29 11:40:21
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]

相关问题 更多 >