关于元类的部分应用
这样可以控制A这个类的atrribute,从而控制其实例化时的object可以调用的方法。不过这个方式在IDE中还是会显式提示可以调用func3,实际执行时会报错has no attribute。
实际上定义class A时先执行的是new方法,所以如果希望定义时传参,要先在new里面写对应的参数,然后还必须在init里面也写上(因为似乎在调用new的过程中,紧接着就会将参数原封不动传递给元类的init)。
在写元类init时可以不用return,用了反而会说init cannot return。
在继承时可以采用type也可以用super,但是最核心的是,不同的方法有时候需要传参self和cls,具体区别参考高天的视频。
init和new的区别仅仅在于是在创建class A这个对象前还是后对其属性进行增添还是修改(区别很模糊,最好写在new里,因为我尝试写在init里提示我__init_subclass不接受kwargs,所以感觉还要重写__init_subclass__而不是__init__)。