Python-Class(类)生命周期和类属性方法(魔法方法)

本文探讨了Python类的生命周期,包括从对象创建到销毁的过程,并详细阐述了类的内置属性和方法,如__del__、__str__等。同时,介绍了类魔法方法的概念,通过代码示例解释了如何在类生命周期中使用这些特殊方法,以实现特定的行为。对于没有定义魔法方法的类,直接调用将会保持默认行为。

内置属性和方法

方法名类型-作用
__init__方法类实例化时自动调用这个函数
__del__方法对象被内存中销毁前,会被自动调用
__str__方法类的实例打印时调用这个函数(返回)用户看到的
__repr__方法和上面的str函数一样,只是这个时返回开发者看到的
__ getattr __方法当调用不存在的属性时访问这个方法
__call__方法如果类实现了这个方法,相当于把这个类型的对象当作函数来使用,相当于 重载了括号运算符

具体参考Python3标准库

生命周期

  • 一个对象从调用类名()开始创建,生命周期开始
  • 一个对象 __del__ 方法一旦被调用,生命周期结束
  • 在对象生命周期内可以访问,对象属性,或者让对象调用方法

例如:

class Cat:
    def __init__(self, name):
        self.name = name
        print('他来了 他来了')

    def __del__(self):
        print('他走了 他走了')

#  Tom 是一个全局变量
tom = Cat('Tom')
print(tom.name)
print('-' * 50)

执行如下

他来了 他来了
Tom
--------------------------------------------------
他走了 他走了

现在 我们调用 del 删除 tom

-- omit --

#  Tom 是一个全局变量
tom = Cat('Tom')
print(tom.name)
del tom
print('-' * 50)
他来了 他来了
Tom
他走了 他走了
--------------------------------------------------

Class魔法方法

上面的表格以及描述的差不多了,贴一段代码来例举

class Cat:
    #  类实例化时自动调用这个函数
    def __init__(self, name):
        self.name = name
        print('%s他来了 他来了' % self.name)

    #  对象被内存中销毁前,会被自动调用
    def __del__(self):
        print('他走了 他走了')

    #  类的实例打印时调用这个函数(返回)用户看到的
    def __str__(self):
        return '我是Cat的类'

    #  和上面的str函数一样,只是这个时返回开发者看到的
    def __repr__(self):
        return '__repr__'

    #  当调用不存在的属性时访问这个方法
    def __getattr__(self, item):
        item = 'A'
        print('属性不存在,默认为 %s' % item)

    #  如果类实现了这个方法,相当于把这个类型的对象当作函数来使用,相当于 重载了括号运算符
    def __call__(self, *args, **kwargs):
        print('我是 %s 通过__call__转函数实例化的' % args)


#  Tom 是一个全局变量
tom = Cat('Tom')
print(tom.name)
# del tom
print('-' * 50)
print(tom)
tom.sex
print('*' * 50)
tom('Tim')

懒的同学 看下面 执行结果

Tom他来了 他来了
Tom
--------------------------------------------------
我是Cat的类
属性不存在,默认为 A
**************************************************
我是 Tim 通过__call__转函数实例化的
他走了 他走了

__call__ 如果没有定义的话 就 tom('Tim') 就用实例直接调用类的话会保持哟~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值