Python_内置方法

1.del 方法和对象的生命周期

介绍两个对象的内置方法,那么在Python中啊,还有另外一个跟初始化方法 __init__相对应的方法, __del__方法,当一个对象要被从内存中销毁之前, 所谓从内存中销毁,就是把这个对象从内存中咔嚓掉,当这个对象离开内存之前, 系统会自动帮我们调用一下对象的__del__方法.

在实际开发中啊,可以对 __init__方法进行改造,这样呢可以让创建对象更加的灵活对吧?在开发中啊,如果希望在一个对象离开这个世界之前,还希望让它再做一些事情,这个时候呢就可以考虑到__del__方法了,先使用class这个关键字来定义一个猫类Cat. 要自定义初始化方法, 应该在self后面增加一个逗号,然后增加一个形参, new_name,方法的形参准备好了之后,我们就在方法内部定义一个name的属性,并且把new_name这个形参设置给name这个属性,

属性定义完成,我们就使用print函数做一个输出,现在一个自定义初始化方法已经搞定了,

使用类名来创建对象,同时在创建对象时要指定一下new_name这个参数对应的实参, tom = Cat("Tom"), 

class Cat:
    def __init__(self, new_name):
        self.name = new_name
        print("%s 来了" % self.name)

tom = Cat("Tom")

运行一下程序, 运行结果:

调用完初始化方法之后,这样对象就已经存活在世界上了,在后续我们就可以通过tom 这个变量名访问到对象内部的属性. 下面代码访问tom 的name 属性.

class Cat:
    def __init__(self, new_name):
        self.name = new_name
        print("%s 来了" % self.name)

tom = Cat("Tom")
print(tom.name)

运行结果: 输出了Tom

 没有主动调用__del__方法, 但程序执行完成前会自动调用

class Cat:
    def __init__(self, new_name):
        self.name = new_name
        print("%s 来了" % self.name)

    def __del__(self):
        print("%s 去了" % self.name)

tom = Cat("Tom")
print(tom.name)
# 程序执行完成前,调用了__del__方法, 输出了 "Tom 去了"

 运行结果:

因为这个方法是在对象被从内存中销毁之前由系统自动调用的,现在在代码的下方使用print函数做一个分割线,"Tom去了" 应该在分割线下方输出,因为tom 这个变量在当前这个模块中是一个全局变量,当我们所有的代码执行完成之后,系统才会把汤姆这个对象进行回收.

class Cat:
    def __init__(self, new_name):
        self.name = new_name
        print("%s 来了" % self.name)

    def __del__(self):
        print("%s 去了" % self.name)

tom = Cat("Tom")
print(tom.name)
# 程序执行完成前,调用了__del__方法, 输出了 "Tom 去了"
print("-" * 50)

运行结果:

Python中有个特殊的关键字del, 能够删除某一个对象,del关键字就可以删除一个对象,现在使用del 关键字把tom 这个对象做个删除, del关键字的代码是在分割线的上方,再来运行一下程序,对比一下效果,这次"Tom去了"就在分割线上方输出了, 所以我们用del 关键字把tom 这个对象删除之后,系统会首先自动把我们调用__del__ 方法,当__del__ 方法执行完成之后,才会来执行第20行的打印分割线这行代码.

class Cat:
    def __init__(self, new_name):
        self.name = new_name
        print("%s 来了" % self.name)

    def __del__(self):
        print("%s 去了" % self.name)

tom = Cat("Tom")
print(tom.name)
# 程序执行完成前,调用了__del__方法, 输出了 "Tom 去了"


# del 关键字可以删除一个对象
del tom
print("-" * 50)

执行结果:

当__del__ 方法执行完成之后,才会来执行第20行的打印分割线这行代码.

2. str方法定制变量输出信息

 

另外一个内置方法__str__,在Python中,我们如果使用print这个函数输出一个对象变量时,默认情况下会输出, 这个变量引用的对象是由哪一个类创建的对象,并且把这个对象的内存地址输出来,如果在开发中,我们使用print函数在输出这个变量时,不希望看到这些内容,而希望看到一些自己定义的内容, 应该使用到__str__这个内置方法了,但是在使用__str__这个内置方法时,必须要返回一个字符串.

我们直接在控制台把tom 这个变量做个输出,如果现在运行程序会输出猫类Cat()以及猫对象tom 在内存的地址.

下面代码直接打印tom 变量

class Cat:
    def __init__(self, new_name):
        self.name = new_name

        print("%s 来了" % self.name)

    def __del__(self):
        print("%s 去了" % self.name)

#tom 是一个全局变量
tom = Cat("Tom")
print(tom)

输出结果(第三行): 输出Cat()类, 并且把对象tom 的地址输出出来

这个就是默认情况下使用print函数看到的效果.

现在使用__str__方法, 并且返回一个字符串

class Cat:
    def __init__(self, new_name):
        self.name = new_name

        print("%s 来了" % self.name)

    def __del__(self):
        print("%s 去了" % self.name)

    def __str__(self):
        #必须返回一个字符串
        return "我是小猫"

#tom 是一个全局变量
tom = Cat("Tom")
print(tom)

输出结果:

 

增加了一个__str__方法后,看一下效果,"Tom来了"之后输出的是"我是小猫",而不是输出之前默认的创建这个对象的类, 以及对象在内存中的地址. 通过这个演练可以发现,如果我们在开发中啊,希望使用print函数打印某一个对象的变量时,希望在控制台看到一些我们自定义的信息,就可以利用__str__这个内置方法,同时要注意这个方法是必须要返回一个字符串的, 那现在既然是返回一个字符串,我们可以对"我是小猫"进行一个改造.

class Cat:
    def __init__(self, new_name):
        self.name = new_name

        print("%s 来了" % self.name)

    def __del__(self):
        print("%s 去了" % self.name)

    def __str__(self):
        #必须返回一个字符串
        return "我是小猫[%s]" % self.name

#tom 是一个全局变量
tom = Cat("Tom")
print(tom)

运行结果:

输出"我是小猫Tom",现在我们对使用方法改造之后,再使用print函数打印猫对象tom的时候,就可以直接看到猫对象tom的内部属性是什么值,而不需要再在外部通过tom.name这种方式来查看一下这个对象中name属性保存的是什么值.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值