如何在另一脚本中调用已创建类对象的成员函数?
问题与解决方案
问题描述
现有类Test2的代码如下:
class Test2: def __init__(self): self.a=10 self.sq() def sq(self): print(self.a*2) def call_later(self): print("Called Later")
调用脚本代码如下:
from test2 import * import time Test2() time.sleep(30) # 我想不用重新创建对象就能调用这个函数 Test2.call_later()
需求:创建Test2对象后,延迟一段时间,无需重新创建对象即可调用call_later函数,该如何实现?
解决方案
方法1:保存对象引用
这是最直观的解决方式,把创建的Test2实例赋值给一个变量,后续直接通过变量调用方法:
from test2 import * import time # 将实例保存到变量 test_obj = Test2() time.sleep(30) # 直接通过变量调用call_later方法 test_obj.call_later()
方法2:将call_later改为静态/类方法
如果call_later不需要访问实例的属性或其他实例方法,可以修改方法类型,直接通过类调用:
- 静态方法(无需类或实例引用):
class Test2: def __init__(self): self.a=10 self.sq() def sq(self): print(self.a*2) @staticmethod def call_later(): print("Called Later")
调用时直接用Test2.call_later()即可,不需要创建实例。
- 类方法(需要访问类属性时使用):
class Test2: def __init__(self): self.a=10 self.sq() def sq(self): print(self.a*2) @classmethod def call_later(cls): print("Called Later")
方法3:用类属性存储实例引用
如果需要在类级别访问已创建的实例,可以在__init__中把当前实例存入类属性,适合单实例场景:
class Test2: # 类属性存储实例 instance = None def __init__(self): self.a=10 self.sq() # 将当前实例赋值给类属性 Test2.instance = self def sq(self): print(self.a*2) def call_later(self): print("Called Later")
调用脚本:
from test2 import * import time Test2() time.sleep(30) # 通过类属性调用实例方法 Test2.instance.call_later()
注意:如果创建多个Test2实例,类属性会被最后一个实例覆盖。
内容的提问来源于stack exchange,提问作者Myron Dsilva
相关产品推荐
相关产品推荐

