(Photo by Cosmic Timetraveler on Unsplash)
Python高级语法里面的元类,之前一直没有看懂,今天重新看讲解元类的文章。这篇深刻理解Python中的元类(metaclass)翻译Stack Overflow上面大神e-satis对元类的讲解,讲解得十分清楚,看完后我对元类的理解豁然开朗。
下面是结合代码(基于Python 2.7环境)进行实操。
|
|
编译后,查看Hello这个类的__dict__属性,可以看到有say_Hello方法,它是一个function,解释器幕后创建完Hello类之后,就生成了say_Hello方法。
|
|
接下来,我们new一个实例对象hello,然后调用say_Hello方法(注意:一定要是say_Hello,使用say_hello或别的格式都会报错,因为和SayMetaClass里面__new__函数定义的格式不匹配),传入参数’jackson’,成功打印预期结果。
|
|
既然这样,我使用type元类来新建一个Bye类,创建实例bye,然后执行bye.say_Bye(‘andrew’)方法应该也是可以成功的。查看Bye.__dict__,结果发现Bye类没有这个say_Bye这个方法。
|
|
我们new一个实例对象bye,调用say_Bye方法,提示没有这个属性。
|
|
我没想明白这里面的原因。谁知道答案?请指点一下。
参考资料: