关于导入类的问题:如何在Python中调用指定类方法
解决方法:避免类初始化时自动执行方法,手动调用指定方法
问题出在你当前的Juden类把业务方法直接放在了__init__里——__init__是Python类的构造方法,只要你实例化这个类,它就会自动执行里面的所有代码,所以你一导入并创建Juden对象,login()、Search()这些方法就会被自动触发。
要实现“手动调用指定方法”的需求,有两种常用方案:
方案1:修改原类的__init__(推荐)
把__init__还原成只做属性初始化的本职工作,去掉里面对业务方法的调用,让你可以在外部按需调用:
修改Main.py里的Juden类:
class Juden: def __init__(self, username, password): # 只保存用户的账号密码,不执行业务方法 self.username = username self.password = password def login(self): <some code> def Search(self): <some code> def NewPosts(self): <some code> def ComLikFol(self): <some code>
然后在你的第二个文件里,就可以完全控制方法的执行顺序了:
import Main # 创建实例,此时只会初始化属性,不会执行任何业务方法 my_juden = Main.Juden("你的用户名", "你的密码") # 先调用登录方法 my_juden.login() # 执行搜索循环 while True: my_juden.Search() # 可选:加个延时避免频繁请求 # import time # time.sleep(30)
方案2:继承原类并重写__init__(适用于不能修改原代码的情况)
如果你没法改动Main.py的代码,可以通过继承Juden类,重写__init__方法来跳过原构造方法里的自动调用逻辑:
import Main class CustomJuden(Main.Juden): def __init__(self, username, password): # 跳过父类的__init__,自己初始化必要属性 self.username = username self.password = password # 这里不添加任何业务方法调用 # 使用自定义的子类 my_juden = CustomJuden("你的用户名", "你的密码") my_juden.login() # 执行搜索循环 while True: my_juden.Search()
小提示
Python里的__init__设计初衷是初始化对象的状态,而不是执行具体的业务逻辑。把业务方法从构造方法里抽出来,不仅能解决你现在的问题,还能让类的逻辑更清晰、复用性更强。
内容的提问来源于stack exchange,提问作者Ignesuss
相关产品推荐
相关产品推荐

