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)]