魔法方法
魔法方法:在python中,有一些内置好的特定方法,这些方法在进行特定的操作时会自动被调用,成为魔法方法。
魔法方法的命名总是被双下划线包围,比如: _ 名称_
常用魔法方法
-
_ doc_ : 用来查看类的说明文档(类中的注释说明)
-
_ module_:查看当前类所在的模块
-
_class _:查看对象(根据所要查看的对象调用对象会不同。)
-
_dict _:用于获取类或者实例的属性字典
注意:
实例属性存储在对象中,所以通过对象._dict_获得的是实例属性
除实例属性以外的成员都存储在类中,所以通过 类._dict_来获得
_dir _():是列表形式返回所有的成员,所以dict更倾向是dir的子集 -
_ del_():当由该类创建的实例对象,被删除或者说在内存中被释放,将会自动触发执行
叫做析构方法。
总结:
当代码全部执行完毕,才自动触发_del_()
如果需要提前触发,则需要通过del关键字,删除所有对象后触发_del_()
注意:
此方法一般不需要定义,因为python是一门高级语言,程序员在使用时无需关系内存的分配与释放,一般都是交给python解释器来执行。所以,析构函数的调用是由解释器在进行垃圾回收时自动触发执行。 -
_call _():将对象变成一个可调用对象。也就是说,当一个类中有_call _()方法时,其实例化得到的对象便是可调用的(callable)
-
_new _():用于创建与返回一个对象。在类准备将自身实例化时调用。
文字解释:
1、_new _()方法用于创建对象
2、 _init _ ()方法在对象创建时候自动调用,但是此处重写了父类的new()方法,覆盖了父类new()创建对象的功能,所以并没有创建成功,仅执行了new方法内部代码。
注意:
- 在创建对象时,一定要将对象返回,才会自动触发init()方法。
- _ init_()方法当中的自动参数(self),实际上就是_new_()返回的实例,也就是该对象。
_init _()与 _new _()区别
- _init _()实例方法。 _new _()静态方法。
- _init _()在对象创建后自动调用。 _new _()创建对象的方法。
单例模式
单例模式:常用的软件设计模式。也就是说该类只包含一个实例。
通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望系统中某个类的对象只能存在一个,单例模式是最好的解决方案。
通常应用在资源管理器中,比如:日志记录等。
单例模式创建
结合之前的继承并改写父类中new的创建对象方法。
创建单例模式思路:
当对象不存在时候——创建对象
当对象已经存在时候——永远只返回当前对象
可以看到图中几个对象的id地址一致。这就是单例模式。