理解Python类输出

时间:2018-03-11 02:08:15

标签: python class

我试图找出下面python程序的输出。对我来说最令我困惑的程序部分是主print(c2.clown(c1.clown(2)))中的print语句在这一行中究竟发生了什么?我对该计划结果的预测如下:

  

现在小丑。

     

从3

创建一个Bozo      

从4

创建一个Bozo      

小丑3

     

18

     

3 + 6 =返回9

     

小丑4 <​​/ p>      

32

     

4 + 8 =返回12

     

print(c2.clown(c1.clown(2))= 12 * 2 = 24 ????

但输出/答案是:

  

现在小丑。

     

创建一个Bozo:3

     

创建一个Bozo:4

     

小丑2

     

12

     

小丑8

     

64

     

16

 class Bozo:
    def __init__(self, value):
        print("Create a Bozo from:", value)
        self.value = 2 * value


    def clown(self, x):
        print("Clown", x)
        print(x * self.value)
        return x + self.value


def main():
    print("Clowning around now.")
    c1 = Bozo(3)
    c2 = Bozo(4)
    print(c2.clown(c1.clown(2)))

main()

2 个答案:

答案 0 :(得分:1)

# c1.clown(2) works as :
def clown(self, x):  #x=2, c1.value = 6
    print("Clown", x) #print("Clown, 2")
    print(x * self.value) #print(12) 12=6*2
    return x + self.value #return 2+6=8 

# c2.clown(8) works as :
def clown(self, x):  #x=8, c1.value = 8
    print("Clown", x) #print("Clown, 8")
    print(x * self.value) #print(64) 64=8*8
    return x + self.value #return 8+8=16

print(16)

答案 1 :(得分:1)

由内而外......

c1.clown(2)在任何事情之前运行并返回。

它打印小丑2,然后打印2 * c1.value = 2 * 6 = 12

返回2 + c1.value = 2 + 6 = 8,传递给c2.clown()

4 + 8永远不会跑。它的8 + 8因为小丑值乘以2