繁体   English   中英

如何在不发送自我的情况下从内部类更改外部类?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM