class Cat:
def eat(self): # 类里方法的第一个形参,必须是 self
print('我能吃东西')
类里面方法的第一个参数必须为self,self代表类的实例,而非类。
同一个类的两个实例对象,地址不同
魔法方法:
_new_(): 对象的创建,是一个静态方法,第一个参数是cls。(想想也是,不可能是self,对象还没创建,哪来的self)
_init_ (): 对象的初始化, 是一个实例方法,第一个参数是self。
_new_()方法在类定义中不是必须写的,如果没定义,默认会调用object._new_()去创建一个对象。如果定义了,就是override,可以custom创建对象的行为。
定义单例模式时,因为自定义的_new_()重载了父类的_new_(),所以要自己显式调用父类的_new_(),即object._new_(cls, *args, **kwargs),或者用super()。
_init_ ()方法通常用在初始化一个类实例的时候。子类重写init方法时,如果不显式调用父类_init_()方法,子类对象调用父类的方法时,会有异常。
创建对象后,python解释器默认调用_init_()方法。当删除一个对象时,python解释器也会默认调用一个方法,这个方法为_del_()方法。在python中,对于开发者来说很少会直接销毁对象(如果需要,应该使用del关键字销毁)。Python的内存管理机制能够很好的胜任这份工作。也就是说,不管是手动调用del还是由python自动回收都会触发_del_()方法执行: