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

Python同一类内如何将一个成员函数的返回值传递给另一成员函数使用

问题根因
  • 类方法的return返回值不会自动持久化存储,你调用open_file()后返回的file_vals列表没有被接收,直接被丢弃了
  • joiner()方法定义时要求传入file_vals参数,实际调用时没有传入任何参数,自然无法获取到对应值
  • 额外隐藏问题:如果words.txt文件行数不足20行,原代码不会走到else分支,open_file()没有return语句,会默认返回None,即使接收返回值也会报错
类方法中return的正确用法

类方法的return返回值需要在调用侧主动接收,常见用法有两种:

  • 调用方法时将返回值赋值给变量,后续需要使用时直接传入变量即可
  • 如果返回值需要在同一个实例的多个方法中复用,可以把返回值绑定到实例自身的self.xxx属性上,所有实例方法都可以直接读取该属性,不需要反复传参
修复方案

方案1:调用时接收返回值传入joiner

修改后的完整代码如下:

import nltk

nltk.download('wordnet')
from nltk.corpus import wordnet as wn

class Sentence:

    def open_file(self):
        file_vals = []
        i = 0
        with open("words.txt", "r") as my_file:
            for line in my_file:
                if i < 20:
                    stripped_line = line.strip()
                    file_vals.append(stripped_line)
                    i += 1
                else:
                    break
        print(file_vals)
        return file_vals

    def joiner(self, file_vals):
        val_1 = wn.synsets(file_vals[0])[0].pos()
        val_2 = wn.synsets(file_vals[1])[0].pos()

        if val_1 == "n" and val_2 == "v":
            print(val_1.capitalize() + " " + val_2 + ".")


my_obj = Sentence()
# 接收open_file的返回值
file_content = my_obj.open_file()
# 把返回值传入joiner方法
my_obj.joiner(file_content)

方案2:将返回值绑定到实例属性,无需传参

如果file_vals需要在多个实例方法中复用,更推荐这种写法:

import nltk

nltk.download('wordnet')
from nltk.corpus import wordnet as wn

class Sentence:

    def open_file(self):
        # 把读取到的内容绑定到实例属性,所有实例方法都可访问
        self.file_vals = []
        i = 0
        with open("words.txt", "r") as my_file:
            for line in my_file:
                if i < 20:
                    stripped_line = line.strip()
                    self.file_vals.append(stripped_line)
                    i += 1
                else:
                    break
        print(self.file_vals)

    # 不需要额外传入file_vals参数
    def joiner(self):
        val_1 = wn.synsets(self.file_vals[0])[0].pos()
        val_2 = wn.synsets(self.file_vals[1])[0].pos()

        if val_1 == "n" and val_2 == "v":
            print(val_1.capitalize() + " " + val_2 + ".")


my_obj = Sentence()
my_obj.open_file()
# 直接调用即可,方法内部自动读取实例的file_vals属性
my_obj.joiner()
注意事项

调用wn.synsets()时如果对应单词不在wordnet词库中,会返回空列表,直接取[0]会报索引错误,建议添加非空判断避免运行报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:18:01