Python-面向对象编程-内置方法&属性

145 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第7天,点击查看活动详情

1. __del__方法

在Python中

  1. 当使用类名()创建对象时,为对象分配完空间后,自动调用__init__方法
  2. 当一个对象被从内存中销毁前,系统会自动帮我们调用__del__方法

应用场景:

  • __init__改造初始化方法,可以让创建对象更加灵活
  • __del__如果希望在对象被销毁前,再做一些事情,可以考虑以下__del__方法

生命周期:

  • 一个对象从调用类名()创建,生命周期开始
  • 一个对象的__del__方法一旦被调用,生命周期结束(相当于某对象在这个世界上最后一个调用的方法)
  • 在对象的生命周期内,可以访问对象属性,或者让对象调用方法

1.1 示例一

代码示例一如下所示:使用del关键字手动删除对象

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.name)

# del关键字可以删除一个对象
del tom

print("-" * 50)

示例一程序运行结果如下图所示:del关键字运行结束,将tom对象销毁,系统会自动运行__del__方法,然后输出了“我去了”

注意:观察运行结果可以发现,此处的“我去了”输出在横线上方,是因为变量提前被del关键字手动删除了,内存也被释放。

image.png

1.2 示例二

代码示例二如下所示:

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.name)



print("-" * 50)

示例二程序运行结果如下图所示:若没有手动删除tom变量,则系统会在运行结束自动释放内存,此时系统就会自动运行__del__方法,从而输出我去了。

注意:观察运行结果可以发现,“我去了”此时输出在横线下方,原因如上所讲。

image.png

2. __str__方法

在Python中,使用print输出对象变量,默认情况下,会输出这个变量引用的对象是由哪一个类创建的对象,以及在内存中的地址(十六进制表示)

如果在开发中,希望使用print输出对象变量时,能够打印自定义的内容,就可以利用__str__这个内置方法了。

注意:__str__方法必须返回一个字符串

代码示例如下所示:使用__str__方法,并且return一个字符串。在使用print输出这个对象变量,输出结果就为自定义的返回值。

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)

print("-" * 50)

运行结果如下图所示:

image.png