python - 如何在不发送 self 的情况下从内部类更改外部类?

标签 python class

我有 A 类及其内部类 B

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

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

关于python - 如何在不发送 self 的情况下从内部类更改外部类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54406199/

相关文章:

C++ 这个类有什么问题?

python - 将 pdf 文件附加到 EmailMessage?

Python 3,使用请求(库)填写表单返回同一页面 HTML,无需输入参数

python - sparse_csc 矩阵的索引在提取一些列后反转

python - 有没有一个Python函数可以获取真实社区?

c++ - map可以包含类对象还是类对象?

同一类中的 JavaScript 调用方法未定义?

python - 使用 Django Rest Framework 将操作字段添加到帖子中

c++ - 将 `std::sort` 与模板类中的成员函数一起使用

保存对象类型的 Java JPanel 组合框