魔术方法
一种特殊的方法而已。
特点:不需要人工调用,在特定的时刻自动执行。
__init__初始化魔术方法
1.触发时机:实例化对象之后触发
2.作用:为对象添加对象的所属成员。
3.参数:一个self 接受当前对象 其他的参数根据实例化的传参决定
4.返回值:无
5.注意事项:无
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| class Human: eye = 2 skin = 'yellow'
def __init__(self,kidname,petname): self.sex = '男' self.age = 1 self.name = kidname self.petname = petname
def eat(self): print('吃饭方法') def run(self): print('跑步方法') def sleep(self): print('睡觉方法')
one = Human('邓玉琪','妮妮') print(one.__dict__) print(one)
|
__new__构造方法
1.触发时机:实例化对象的时候触发!
2.作用:管理控制对象的生成过程。
3.参数:一个cls接受当前类,其他的参数根据实例化的参数决定
4.返回值:可有可无 没有返回值,实例化结果为None
5.注意事项:new魔术方法跟init的魔术方法的参数一致(除了第一个)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| class Human: eye = 2 skin = 'yellow'
def __new__(cls,sex): if sex == '女': return object.__new__(cls) else: return None
def eat(self): print('吃饭方法')
def run(self): print('跑步方法')
def sleep(self): print('睡觉方法')
one = Human('男') print(one)
|
__del__析构方法
1.触发时机:对象被系统回收的时候自动触发(del时不触发,结束后触发)
2.作用:回收程序使用过程的信息和变量等
3.参数:一个self接收当前对象
4.返回值:无
5.注意事项:无
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| class Human: eye = 2 skin = 'yellow'
def eat(self): print('吃饭方法') def run(self): print('跑步方法') def sleep(self): print('睡觉方法')
def __del__(self): print('del方法被触发')
one = Human()
two = one
del one del two
|
__call__
1.触发时机:将对象当作函数调用的时候自动触发
2.作用:常用于归结类/对象的操作步骤,方便后期掉用
3.参数:一个self接受当前对象,其余的参数根据需求添加
4.返回值:可以有,可以没有
5.注意事项:无
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| class Human: name = '张三' age = 18 sex = '男'
def __call__(self,xs): print('call方法被触发') self.eat() self.cry() return xs
def eat(): print('吃货的世界我们不懂~') def cry(self): print('55555555~~~~')
zs = Human()
result = zs('善良') print(result)
|
__len__
1.触发时机:使用len函数检测对象的时候自动触发
2.作用:使得len可以检测对象中某个数据的信息
3.参数:一个self接受当前对象
4.返回值:必须有,必须是整型
5.注意事项:len检测什么有程序员自己决定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| class Car: color = '黑色' weight = '2T' grand = '奥利奥' circle = ['左前轮','右前轮','左后轮','右后轮']
def __len__(self): num = len(self.circle) return num
def playmusic(self): print('你存在我深深的脑海里~') def move(self): print('请注意倒车,请注意倒车')
mycar = Car()
result = len(mycar) print(result)
''' 列表也是List类,我们定义的列表不就是List类的一个对象? 确确实实 '''
|
__str__
1.触发时机:使用print打印对象的时候自动触发
2.作用:可以定义打印对象显示的信息内容
3.参数:一个self接受当前对象
4.返回值:必须有,且必须是字符串类型
5.注意事项:除了print之外,使用str() 转换数据的时候也会触发
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| class Human: color = '黄色' sex = '女' age = 18 name = '史珍香'
def __str__(self): print('str方法被触发') return self.name
def eat(self): print('真香~') def smile(self): print('哇哈哈哈哈哈哈')
szx = Human()
print(szx)
str(szx)
''' 我打印列表(List类的对象)?给我是真正列表内容 我打印字符串(Str类的对象),给我的是字符串的内容 '''
|