魔术方法__init__ , __new__ , __del__

‘’’
魔术方法: 一种特殊的方法而已
特点:不需要人工调用,在特定的时候自动执行。

  1. init 初始化魔术方法

    学习魔术方法的步骤:
    1. 触发时机:实例化之后立即触发
    2. 作用: 为对象添加对象所属成员
    3. 参数:一个self是接收当前对象,其它的参数根据实例化的传参决定
    4. 返回值:没有返回值
    5. 注意事项:没有注意事项
    ‘’’
    ‘’’

__init__初始化魔术方法

class Human:
#属性

eye = '2个'
skin = '黄色'

#方法
#魔术方法
def __init__(self,kidname,bb):    #    init的形参
    print('init方法被执行了')
    #为对象添加成员
    self.sex = '男'
    self.age = '1'
    self.name = kidname
    self.aa = bb

def eat(self):
    print('吃饭')

def run(self):
    print('跑步')

def sleep(self):
    print('睡觉')

#实例化一个对象
one = Human(‘小明’,‘cc’)

实例化对象之后触发魔术方法__init__,

分为两步:1.制作一个对象 2.为对象初始化操作(系统自动运行)

先在魔法方法的括号内设置一个形参接收数据,然后将形参放到需要添加成员的位置,

这样在实例化对象的括号内添加成员即可被参数接收到

可以设置多个参数

print(one.dict)

print(one)
‘’’

‘’’
2. new 构造方法 意思就是:构建,创造

学习魔术方法的步骤:
    1. 触发时机:实例化对象的时候触发
    2. 作用: 管理控制对象的生成 
    3. 参数:一个cls接收当前类,其它的参数根据实例化的参数决定
    4. 返回值:可有可无,没有返回值,实例化结果为None
    5. 注意事项:new魔术方法跟init的魔术方法的参数一致(除了第一个)

‘’’
‘’’

new 构造方法

class Human:
#属性

eye = '2个'
skin = '黄色'

#方法
#魔术方法                (重载object内部自带的__new__)
def __new__(cls,sex):
    #print('new方法被触发了')
    #return 2

    #自己控制对象的生成过程(女的生,男的不生)
    if sex == '女':
        #生成对象并返回
        return object.__new__(cls)   #上帝之手
    else:
        #不生成对象
        return None


def eat(self):
    print('吃饭')

def run(self):
    print('跑步')

def sleep(self):
    print('睡觉')

#实例化一个对象
one = Human(‘女’) #这里控制对象的生成,条件满足 女 时才可以生成对象,否则报错

实例化对象的时候触发魔术方法__new__

分为两步:1.制作一个对象(new) 2.初始化对象(init)

print(one.eye) # 调用生成后的对象成员
one.run()
#print(one) #当条件无法满足生成对象时,打印对象时显示结果为None
‘’’
‘’’
#狸猫换太子游戏
#猴子类
class Monkey:
pass

#人类
class Human:
#重载人类的构建方法,用猴子类来做人的对象
def new(cls):
#使用猴子类代替人类创建对象
return object.new(Monkey) # 关键点在于括号内填上 Monkey 也就是猴子类
pass

#实例化一个人类对象
ren = Human()
print(ren) #打印人类的结果,出现的会是猴子类的数据
‘’’

‘’’
3. del 析构方法 (拆构方法)

学习魔术方法的步骤:
    1. 触发时机:对象被系统回收的时候自动触发(del不一定触发)
    2. 作用: 回收程序使用过程的信息和变量等(相当于清理垃圾文件)
    3. 参数:一个self接收当前对象
    4. 返回值:没有返回值
    5. 注意事项:没有

‘’’

del 拆构方法

class Human:
#属性

eye = '2个'
skin = '黄色'

#方法

def eat(self):
    print('吃饭')

def run(self):
    print('跑步')

def sleep(self):
    print('睡觉')

    # 魔术方法  

def __del__(self):
    print('del方法被触发了')

#实例化一个对象
one = Human()
#print(’===============’) # 测试 del 被触发的时间,__del__在打印之后触发。

对象被系统回收的时候触发魔术方法__del__

#将对象同时赋值给另外一个变量
ss = Human()

#主动删除对象
del one # 删除变量,系统回收对象,不是使用del就一定会触发 del
# 比如上面还有另外一个变量,只删除一个变量时不会触发 del
# 需要将所有变量全部del删除后才会触发 del

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值