C语言基础学习PYTHON——基础学习D06
20180826内容纲要:
面向对象进阶学习
1 静态方法
2 类方法
3 属性方法
4 类的特殊成员方法(本节重点)
(本节重点)
6 异常(本节重点)
7 动态导入模块
8 小结
9 练习
0 类的创建(补充)
第一种方法
第二种方法类是由type类实例化产生的。
那么类的创建过程是怎样的呢?类中有一个属性 __metaclass__,其用来表示该类由谁来实例化创建
所以,我们可以为 __metaclass__ 设置一个type类的派生类,从而查看类创建的过程。
metaclass 详解文章:http://stackoverflow.com/questions/100003/what-is-a-metaclass-in-python
__new__&__metaclass1 静态方法 @staticmethod
与类无关,不能访问类里的任何变量
只是名义上归类管理,但实际上静态方法里访问不了类和实例中的任何属性。只是名义上归类管理,但实际上静态方法里访问不了类和实例中的任何属性。
静态方法@staticmethod
通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法
上面的调用会出错误,说是eat需要一个self参数,但调用时却没有传递。
没错,当eat变成静态方法后,再通过实例调用时就不会自动把实例本身当作一个参数传给self了。
想让上面的代码可以正常工作有两种办法
1. 调用时主动传递实例本身给eat方法,即d.eat(d)
2. 在eat方法中去掉self参数,但这也意味着,在eat中不能通过self.调用实例中的其它变量了。这就是静态方法。
静态方法@staticmethod

