Python代码阅读提问!!!!!!!

1.问题:
r1,r2,r3对象没调用print_size方法,那么为什么每创建一个新的对象,
就由print_size方法向recs列表添加数据

代码:

class Rectangle():
     recs = []


     def __init__(self, w, l):
                    self.width = w
                    self.len = l
                    self.recs.append((self.width,
                                       self.len))

     def print_size(self):
                    print("""{} by {}
                          """.format(self.width,
                                      self.len))


r1 = Rectangle(10, 24)
r2 = Rectangle(20, 40)
r3 = Rectangle(100, 200)


print(Rectangle.recs)
>> [(10, 24), (20, 40), (100, 200)]

print_size() 这个函数好像没用哦

def init(self, w, l):是构造函数吧,
构造函数再对象创建的时候自动调用。在这个构造函数里面,对recs执行了append。于是就写进去了。
对于构造函数的知识,可以查查,应该C++,python,java都是差不多的吧。

从头到尾都没有调用过print_size函数,之所以最后会形成[(10, 24), (20, 40), (100, 200)]这个结果,是因为你每次实例化,会触发__init__这个构造函数,等于初始化。

然后你的recs是列表类型,且被定义为类变量,在类转变为类对象时,它被初始化生成,只要类存在,它就会一直存在内存中,不会被回收,所以你可以追加值。

综合上述原因,最后你能打印出[(10, 24), (20, 40), (100, 200)]