在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
关键: 1. __index 元方法 可以让classA在被其它表XX设置为元表时, XX被访问YY时如果XX里没有YY,但是XX有元表且元表有__index
就会继续访问元表里有没有YY
关键: 2. new方法最后返回的是新创建的o,所以test_a, test_b最终访问的才不是同一个getA getB 而o又把classA设置为了元表,访问顺序见关键1
关键: 3. getA方法里的self指的是调用它的对象,而不是classA这个对象本身(当然classA也可以作为调用它的对象,比如里传入的self就是classA对象)
,classA:getA的写法只是说明getA是在classA里面定义的而已.
综合三点:
的调用顺序:
1.查看test_a里有没有getA方法 其中test_a里包含的成员为: a,b,元表 classA
2.发现没有getA方法,继续确认getA有没有元表, 发现有元表 classA
3.查看 元表classA有没有 __index元方法,发现存在
4.继续访问classA里有没有getA()方法
5.发现存在getA()方法,就调用它 注意这里传入的self 是test_a对象 (关键3)
6.查看 test_a里有没有 成员a , 其中test_a里包含的成员为: a,b,元表 classA
7.发现存在a,所以返回a
结论: 最终其实test_a test_b访问的都是自己定义的a和b,而不是classA里的 a和b. (测试:把classA里的代码清空 结论:依然可以正确执行)
|
请发表评论