You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不传递构造函数参数时从类A获取运行时值给类B?

如何在类B中获取类A运行时赋值的实例值(无需构造函数传参)

当然有办法啦!结合你给出的代码场景,我整理了几个实用方案,你可以根据自己的需求选:

先看你的原始代码

class_a.py

from class_b import B
class A():
    def __init__(self, value):
        self.value = value
        self.load()
    def load(self):
        new_b = B()

class_b.py

class B():
    def __init__(self):
        self.value = A.value  # 这里想获取A实例的value,但直接拿类属性肯定行不通

方案1:让A实例把自身引用传给B(最合理的常规方案)

不用单独传self.value,直接把A的实例本身传给B就行——这样B不仅能拿到value,后续如果需要调用A的其他方法也很方便,还能明确体现两个类的依赖关系。

修改后代码:
class_a.py

from class_b import B
class A():
    def __init__(self, value):
        self.value = value
        self.load()
    def load(self):
        new_b = B(self)  # 把当前A的实例传给B

class_b.py

class B():
    def __init__(self, a_instance):
        self.a_instance = a_instance
        self.value = a_instance.value  # 直接从A实例里取value

方案2:让A类维护自身实例引用(单实例场景适用)

如果你的程序里只会存在一个A实例,那可以给A类加个类属性来存当前实例,这样B就能直接访问这个属性拿到value:

class_a.py

from class_b import B
class A():
    current_instance = None  # 类属性,用来存当前A实例

    def __init__(self, value):
        self.value = value
        A.current_instance = self  # 初始化时把自己存到类属性里
        self.load()
    def load(self):
        new_b = B()

class_b.py

from class_a import A  # 注意这里要导入A类
class B():
    def __init__(self):
        if A.current_instance is not None:
            self.value = A.current_instance.value
        else:
            self.value = None  # 处理还没有A实例的情况

⚠️ 注意:这个方案只适合单实例场景,如果有多个A实例,后面的会覆盖前面的,B只能拿到最后一个A实例的value。


方案3:观察者模式(适合动态同步场景)

如果A的value可能会动态变化,或者有多个B实例需要监听这个值的变化,用观察者模式就很合适:让A维护一个观察者列表,当value更新时自动通知所有B实例同步。

class_a.py

from class_b import B
class A():
    def __init__(self, value):
        self._value = value
        self.observers = []  # 存储需要监听的B实例
        self.load()
    
    @property
    def value(self):
        return self._value
    
    @value.setter
    def value(self, new_value):
        self._value = new_value
        self.notify_observers()  # value变化时通知所有观察者
    
    def add_observer(self, observer):
        self.observers.append(observer)
    
    def notify_observers(self):
        for observer in self.observers:
            observer.update(self.value)
    
    def load(self):
        new_b = B()
        self.add_observer(new_b)  # 把B实例加入观察者列表

class_b.py

class B():
    def __init__(self):
        self.value = None
    
    def update(self, new_value):
        self.value = new_value  # 接收A传来的最新value

这个方案完全不用在B的构造函数里传参,而且A的value变化时,所有B实例都会自动同步最新值,适合复杂的动态场景。


内容的提问来源于stack exchange,提问作者techkuz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:34:39