如何从内部类初始化python对象,同时从外部类继承属性



我发现一篇帖子问我在问什么,但这里没有答案——从内部类python访问外部类对象属性。由于似乎没有太多的讨论,我想我会发这个帖子。

以下是我想要实现的目标:

class Outer:
def __init__(self, arg_a, arg_b, arg_c):
self.arg_a, self.arg_b, self.arg_c = arg_a, arg_b, arg_c
self.big_matrix = MakeMatrix(arg_a, arg_b, arg_c)

class Inner:
def __init__(self, arg_x, arg_y, arg_z):
self.new_attribute = F((use instance of big_matrix from outer class), *args, **kwargs)
...
if __name__ == "__main__":
outer_obj = Outer(1, 2, 3)
inner_obj1 = outer_obj.Inner('x1', 'y1', 'z1')
inner_obj2 = outer_obj.Inner('x2', 'y2', 'z2')
inner_obj3 = outer_obj.Inner('x3', 'y3', 'z3')

基本上,我想创建一个Outer类的实例,以及多个内部类的实例(这些实例也继承了Outer对象的属性(。我之所以想这样做,是因为big_matrix属性是内存密集的,我不想制作该big_matx的N个副本。

有办法做到这一点吗?有没有一种更好的编程范式可以在没有嵌套类的情况下完成同样的事情?

Commenters@itprorh66和@a_guest给了我一个最适合我的答案。为了其他可能有类似问题的人,我将回答我自己的问题,展示一个适用于我的情况的实现。

class Outer:
def __init__(self, args_a, args_b, args_c):
self.BigMatrix = BigMatrixFunc(args_a, args_b, args_c)
...
class Inner:
def __init__(self, outer_object, *args):
self.new_attribute = F(outer_object, *args)
...

if __name__ == "__main__":
outer_obj = Outer(1, 2, 3)
inner_obj1 = Inner(outer_obj, 'x1', 'y1', 'z1')
inner_obj2 = Inner(outer_obj, 'x2', 'y2', 'z2')
inner_obj3 = Inner(outer_obj, 'x3', 'y3', 'z3')   

最新更新