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

时间:2013-01-18 03:09:29

标签: python class methods

我正在尝试打印'好的,谢谢'。当我在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())

4 个答案:

答案 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()