Python跨文件导入类时如何将传入参数供类内部函数使用
跨文件向类传参并供类内多方法复用的实现方法
你当前写法跑不通的核心原因有三个:没有为类定义接收外部参数的固定入口、类内部方法没有关联实例的通道、没有保存类实例的引用,导致传入的参数根本没法被类内的函数读取。
要实现跨文件传参给类、供类内部不同方法共用,只需要遵循Python类的基本定义逻辑即可,完整修正代码如下:
test.py(类定义端)
class M: # 初始化方法是Python类接收外部传参的固定入口 def __init__(self, name_t, name_s): # 把传入的两个参数挂载到当前实例的属性上,类内所有方法都能读取 self.stored_name_t = name_t self.stored_name_s = name_s def values(self): # 通过self访问挂载的参数,不需要重复传值 tapi = self.stored_name_t # 此处补全你原本的values业务逻辑即可 def loop(self): # 同样通过self访问另一项挂载的参数 symbol = self.stored_name_s # 此处补全你原本的loop业务逻辑即可
passing.py(参数传入端)
from test import M name_t = 'tomas' name_s = 'santino' # 调用类创建实例时,必须把返回的实例赋值给变量保存,否则创建的对象会直接被GC回收,没法后续调用方法 my_m = M(name_t, name_s) # 后续需要用到传入参数时,直接通过实例调用类内方法即可 # 示例调用: # my_m.values() # 方法内部可以直接拿到之前传入的tomas # my_m.loop() # 方法内部可以直接拿到之前传入的santino
常见踩坑提醒
- 类的实例方法必须把 self 作为第一个固定参数,Python会在调用时自动把当前实例对象传给这个参数,漏写会直接触发参数数量不匹配的报错
- 别在类方法里直接把
name_t/name_s当全局变量引用,类的作用域和模块全局作用域是隔离的,直接引用会触发未定义变量的报错 - 如果不需要在类定义的外部修改这两个传入的参数,可以按照Python的命名规范,给实例属性名加单下划线前缀,标记为“类内部使用”的属性,避免外部代码误修改
内容的提问来源于stack exchange,提问作者Tomas Marmay
相关产品推荐
相关产品推荐

