小能豆

在 python 中如何在另一个方法中调用一个类的方法?

py

我正在尝试打印“好的,谢谢”。当我在 shell 上运行它时,它会打印在单独的行上,并且“谢谢”打印在“好的”之前。有人能帮我解决我做错的地方吗?

>>> test1 = Two() 
>>> test1.b('abcd') 
>>> thanks 
>>> okay

我的代码

class One:
     def a(self):
         print('thanks')

class Two:
     def b(self, test):
         test = One()
         print('okay', end = test.a())

阅读 17

收藏
2025-01-01

共1个答案

小能豆

您的代码问题在于 print 函数中的参数 end 被错误地使用了。printend 参数应指定字符串,表示在打印完内容后要添加的内容(默认是换行符 \n)。然而,您将 end 赋值为 test.a(),这是一个方法调用,返回值为 None,因此导致了意外行为。

修复代码

如果您的目标是顺序打印“好的,谢谢”,可以修改如下:

class One:
    def a(self):
        print('thanks')  # 打印“thanks”

class Two:
    def b(self, test):
        test = One()
        print('okay', end=' ')  # 打印“okay”,并用空格结束
        test.a()  # 调用 a() 打印“thanks”

# 测试代码
test1 = Two() 
test1.b('abcd') 

输出

运行上述代码后,您会得到以下输出:

okay thanks

解释问题

  1. end 参数错误
  2. 在原代码中,end=test.a() 导致 test.a() 被调用,打印了 thanks
  3. 由于 a() 没有显式返回值,默认返回 Noneprint 函数的 end 参数变成了 None,引发了非预期行为。

  4. 正确的打印顺序

  5. 首先打印“okay”。
  6. 通过显式调用 test.a() 来打印“thanks”。

可选改进

如果您希望 Two.b 方法能直接返回组合字符串,而不是依赖于 print 的顺序,可以改写为:

class One:
    def a(self):
        return 'thanks'

class Two:
    def b(self, test):
        test = One()
        return f"okay {test.a()}"

# 测试代码
test1 = Two()
print(test1.b('abcd'))

输出:

okay thanks

这样可以更清晰地控制输出顺序,同时减少副作用。

2025-01-01