我正在尝试打印'好的,谢谢'。当我在shell上运行时,它会在单独的行上打印,并且'thanks'在'okay'之前打印。任何人都可以帮助我做错了吗?
>>> 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())
答案 0 :(得分:0)
print
在处理结果表达式之前按顺序评估函数。
def a(): print('a')
def b(): print('b')
def c(): print('c')
print(a(), b())
print('a', b())
print ('a', b(), c())
print (a(), 'b', c())
输出:
a
b
(None, None)
b
('a', None)
b
c
('a', None, None)
a
c
(None, 'b', None)
因此,python在将元组传递给print之前对其进行评估。在评估它时,方法'a'被调用,导致'thanks'被打印。
然后b
中的print语句继续,这导致'okay'被打印。
答案 1 :(得分:0)
您的问题是,当您致电test.a()
时,您打印一个字符串,而不是将其返回。更改您的代码执行此操作,它将正常工作:
def a(self):
return 'thanks'
根据您在问题中所说的内容,您似乎不需要将end
关键字参数用于print
。只需将test.a()
作为另一个参数传递:
print('okay,', test.a())
答案 2 :(得分:0)
打印'好的谢谢'你的One.a()应该只返回一个字符串而不是print语句。
也不确定Two.b中的“test”参数是什么,因为你会立即将它覆盖为类1的实例。
class One:
def a(self):
return ' thanks'
class Two:
def b(self):
test = One()
print('okay', end = test.a())
>>>> test1 = Two()
>>>> test1.b()
okay thanks
>>>>
答案 3 :(得分:0)
我会尝试这样的事情,因为这意味着你不必改变第一类。这减少了您必须更改的类的数量,从而隔离了更改和错误范围;并保持第一类的行为
class One:
def a(self):
print('thanks')
class Two:
def b(self, test):
test = One()
print('okay', end=' ')
test.a()