如何在不发送自我的情况下从内部阶级改变外部阶级?

时间:2019-01-28 16:19:58

标签: python class

我有A类和内部B类

它们位于不同的文件中(假设a.py和b.py)

我需要在B类方法中更改A.x,不发送“自我” 。即self.inner = B(),而不是self.inner = B(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

2 个答案:

答案 0 :(得分:1)

您可以尝试使用$ grep -E '^[[:space:]]*(class|description)[[:space:]]' file class BarFoo001(BarFooBase): description = 'here's the stuff I want' $ awk 'sub(/^[[:space:]]*(class|description =)[[:space:]]+/,"")' file BarFoo001(BarFooBase): 'here's the stuff I want' 模块(尽管正如@Slam所建议的那样,建议不要这样做):

inspect

答案 1 :(得分:0)

我相信您可以使用inspect模块将黑魔法变成圆顶。

但是我建议您重新考虑是否确实需要此功能以及原因。因为这是一个全面打破OOP和理智的体系结构思想的好例子,所以除非明确为您提供处理方法,否则不要更改外部作用域。如果您不遵循这个主意,您将获得超级紧密耦合的代码。