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

2 投票
1 回答
1156 浏览
提问于 2025-04-18 10:18

我正在写一个程序,这个程序里有一个“主”对象,它负责管理和操作很多小对象。下面是一个简化的例子:

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

这样做看起来有点多余,而且在更复杂的情况下会变得相当繁琐。

有没有人知道更好的方法来访问这些方法呢?

1 个回答

1

在编程中,有时候我们会遇到一些问题,尤其是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,不知道该怎么解决。比如,有人可能在使用某个特定的功能时,发现它并没有按照预期的方式工作。这个时候,查看相关的讨论或者问答平台,比如StackOverflow,就能帮助我们找到解决方案。

在这些平台上,很多人会分享他们遇到的问题和解决办法。通过阅读这些内容,我们可以学习到很多实用的技巧和经验,帮助我们更好地理解编程的世界。

总之,遇到问题时,不要害怕去寻找答案,社区的力量可以为我们提供很多支持和帮助。

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]

撰写回答