我有两个类A和B,我想将A的实例变量共享给B,并确保当我在A中的变量上调用del时,B不再可以访问它并且该变量可以正确访问删除。
我已经想到了4种不同的方法来实现这一目标。
我知道weakref
可能有一个解决方案,但我想知道是否还有另一个与程序设计有关的解决方案
class A():
def __init__(self):
self.var = myVar
def func(self):
return B(self.myVar2)
def stop(self):
del self.myVar
class B():
def __init__(self, myVar)
self.myVar2 = myVar
# Other methods ...
上面是传递变量的示例。当我在A的实例上调用stop时,该变量未正确删除。
答案 0 :(得分:0)
仅使用程序设计(例如继承或嵌套类)来查找解决方案可能会比较棘手且难以阅读,但很可能是这样。您可以使用全局变量,但这将是代码的味道。话虽如此,我将在此处添加一个weakref
解决方案,直到添加其他解决方案为止。
import weakref
class A:
def __init__(self):
pass
def __repr__(self):
return "Instance of A"
class B:
"""
Wants a weak reference to an instance of A
"""
def __init__(self, instance_of_a):
self._a = weakref.ref(instance_of_a)
@property
def a(self):
return self._a()
a_inst = A()
b_inst = B(a_inst)
print(b_inst.a) # Instance of A
del a_inst
print(b_inst.a) # None