请看下面的代码:
class Main:
def __init__(self):
# list to keep track of instances of Sub()
self.sub_list = []
# create instances of Sub()
self.a = Sub()
self.b = Sub()
# append instances to sub_list
self.sub_list.append(self.a)
self.sub_list.append(self.b)
class Sub:
# function to remove the instance from sub_list
def remove_self(self):
x.sub_list.remove(self)
x = Main()
# remove instances of Sub() from sub_list
x.a.remove_self()
x.b.remove_self()
我的目标是使对象具有一种方法,以从创建它们的不同类的列表中删除自身。
上面的代码可以做到这一点,但是我不喜欢这样,我必须直接使用
x
来调用该方法。但是,我想解决的主要问题是,由于无法访问
Sub
,我无法弄清楚如何将类sub_list
移动到单独的文件中。有一个更好的方法吗?
旁注:我正在使用PyQt开发一个项目,其中
Main
是我的MainWindow,而Sub
表示一些可以动态创建和关闭的UI元素。如果可能,我想将所有功能保留在这些元素中。 最佳答案
理想的解决方案是根本不使用sub_list
。似乎没有必要,因为在您的示例中,每个Sub
实例都为其指定了一个字段。话虽如此,如果您想将Sub
移到另一个文件中,可以这样做:sub.py
:
class Sub:
def __init__(self, parent):
self.parent = parent
def remove_self(self):
self.parent.sub_list.remove(self)
然后在您的
main.py
中:from sub import Sub
class Main:
def __init__(self):
self.sub_list = []
self.a = Sub(self)
self.b = Sub(self)
self.sub_list.append(self.a)
self.sub_list.append(self.b)
然后,您可以执行以下操作:
x = Main()
x.a.remove_self()
要么
x.sub_list[0].remove_self()
或者,这是我推荐的方法,摆脱
remove_self
并向Main
添加一个新功能,该功能负责删除Sub
实例:class Main:
def __init__(self):
self.sub_list = []
self.a = Sub(self)
self.b = Sub(self)
self.sub_list.append(self.a)
self.sub_list.append(self.b)
def removeSub(self, index):
self.sub_list.pop(index)
x = Main()
x.removeSub(0)