[英]How to change outer class from inner class without sending self?
我有 A 类和它的内部 B 类
它们在不同的文件中(假设 a.py 和 b.py)
我需要在 B 类的方法中更改 Ax而不发送 "self" 。 即 self.inner = B() 而不是 self.inner = B(self)。 我无法发送“self”,因为 A 类在生成的文件中,我不能碰它。
我该怎么做?
如果我可以发送自我,我会这样做
#a.py
from b import B
class A():
def __init__(self):
self.x = 1
#this would be self.inner = B() instead
self.inner = B(self)
example = A()
print(example.x)
#b.py
class B():
def __init__(self, parent):
self.change(parent)
def change(self, parent):
parent.x = 2
您可以尝试使用inspect
模块(尽管正如@Slam 所建议的那样,远非推荐):
import inspect
class B():
def __init__(self):
inspect.currentframe().f_back.f_locals["self"].x = 2
class A():
def __init__(self):
self.x = 1
self.inner = B()
def print_x(self):
print(self.x)
a = A()
a.print_x()
我相信你可以用inspect
模块来做黑魔法。
但我建议你重新考虑是否真的需要这个,以及为什么。 因为这是一个很好的例子,它打破了 OOP 和整体架构的思想——外部作用域不应该被改变,除非它们明确地为你提供了一个句柄来这样做。 如果你不遵循这个想法,你会得到超紧耦合的代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.