魔法方法:一个类/对象中的方法,在特定的时刻自动触发
__init__初始化魔术方法
触发时机:初始化对象时触发
参数:至少一个self用于接受对象
返回值:无
作用:初始化对象的成员
注意:该方法是为对象初始化,类不拥有初始化的成员
import random
class Human:
#属性
age = 0
color = 'yellow'
#方法
def __init__(self,newname):
#print(self)
#print('init方法执行了')
#初始化性别
if random.choice(['男','女']) == '男':
self.sex = '男'
else:
self.sex = '女'
#初始化姓名(给对象添加了一个name的成员属于型)
self.name = newname
def eat(self):
print('我喜欢吃虾爬子!')
def drink(self):
print('我喜欢和山泉水')
#实例化对象
ld = Human('张益达')#1.制作对象 2.初始化对象(初步处理!)
print(dir(ld))
print(dir(Human))
__new__实例化魔法方法
触发时机:实例化时触发
参数:至少一个cls 接受当前类
返回值:必须返回一个对象的实例
作用:实例化对象
注意:实例化对象是object类底层实现 ,其他类继承了object的__new__方法才能实现实例化对象
class Human(object):
#属性
age = 0
color = 'yellow'
#方法
def __new__(cls,familyName):#实际操作相当于重载object中的__new__方法
#print(cls)#cls表示当前的类
#print('new方法被触发!')
#判断是否姓王,姓王就生出对象,否则就不出生
if familyName == '王':
#借助object中的制作对象的__new__来实例化对象!(如果用cls('王')实例化对象会递归调用重载方法__new__)
return object.__new__(cls)
else:
return None
def eat(self):
print('我喜欢吃虾爬子!')
def drink(self):
print('我喜欢和山泉水')
#实例化对象
xtd = Human('宋')#1.制作对象 2.初始化对象(初步处理!)
print(xtd)
__del__析构魔术方法
触发时机:当对象没有任何变量的引用的时候被触发
参数:一个self接受对象
返回值:无
作用:使用完对象时回收资源
注意:只有当前对象没有任何变量接收时才会被触发
class Human:
#属性
color = 'yellow'
age = 0
#方法
def __del__(self):
print('__del__方法被调用')
h=Human()
x=h #只有当前对象没有任何变量接收时才会被触发
del h
print('程序结束')
_