从另一个不带全局变量的类调用Python主类实例

从另一个不带全局变量的类调用Python主类实例,python,class,instance,call,global,Python,Class,Instance,Call,Global,在下面的代码中,在main()中创建了class A的实例。我想从class B引用该实例,而无需将a声明为global。我该怎么做?(注意-如果您运行此脚本,然后在删除或注释掉global a的情况下再次运行它,请确保在运行之前清除变量或重新启动内核。否则,至少在Spyder中,该脚本看起来运行正常。) B类应接收A对象作为参数,并将其保存为属性 class A(): def __init__(self): pass def start_th

在下面的代码中,在
main()
中创建了
class A
的实例。我想从
class B
引用该实例,而无需将
a
声明为
global
。我该怎么做?(注意-如果您运行此脚本,然后在删除或注释掉
global a
的情况下再次运行它,请确保在运行之前清除变量或重新启动内核。否则,至少在Spyder中,该脚本看起来运行正常。)


B
类应接收
A
对象作为参数,并将其保存为属性

class A():
    
    def __init__(self):
        pass
    
    def start_the_process(self):
        self.b = B(self)
        self.b.add_values(2, 3)
        
    def print_result(self, result):
        print(result)

class B():
    
    def __init__(self, a):
        self.a = a
    
    def add_values(self, val1, val2):    
        self.a.print_result(val1 + val2)
        
def main():
    a = A()
    a.start_the_process()

if __name__ == '__main__':
    main()

实际上,类A是一个大型、复杂的类,由带有控件的自定义视频播放器组成。将调用A传递到类B是复制实例,还是只指向实例?或者,将类A作为参数传递给类B是否会导致任何性能问题(您知道)?它是一个引用,就像传递任何其他参数一样。Python从不复制任何东西,除非你明确告诉它。你提供的解决方案对于我发布的问题非常有效。然后我意识到我没有充分地记录更多关于我的问题的文档,这是由于使用了来自导入包的的装饰器引起的。我发布了另一个问题[
class A():
    
    def __init__(self):
        pass
    
    def start_the_process(self):
        self.b = B(self)
        self.b.add_values(2, 3)
        
    def print_result(self, result):
        print(result)

class B():
    
    def __init__(self, a):
        self.a = a
    
    def add_values(self, val1, val2):    
        self.a.print_result(val1 + val2)
        
def main():
    a = A()
    a.start_the_process()

if __name__ == '__main__':
    main()