文章目录
- 一. `__init__()`
- 二. `__str__()`
- 三. `__del__()`
- 四. `__repr__()`
- 五. 使用案例
一. __init__()
"""
__init__()
调用时机: 在创建对象之后,会立即调用
作用:
1. 用来给对象添加属性,给对象添加一个初始值(构造函数)
2. 代码的业务需求,每创建一个对象,都需要执行的代码可以写在__init__中
"""
class Dog(object):
def __init__(self, name):
print('我是__init__方法,我被调用了')
self.name = name
dog = Dog('大黄')
print(dog.name)
dog1 = Dog('小白')
print(dog1.name)
二. __str__()
"""
__str__()
调用时机:
1. print(对象),会自动调用__str__方法,打印输出的结果是__str__方法的返回值
2. str(对象) 类型转换,将自定义对象转换为字符串的时候,会自动调用
应用:
1. 打印对象的时候,输出一些属性信息
2. 需要将对象转换为字符串类型的时候
注意点:
方法必须返回一个字符串,此方法通常只有 self 一个参数
"""
class Dog(object):
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
print('我是__str__,我被调用了')
return f"小狗的名字是{self.name},年龄是{self.age}"
dog = Dog('大黄', 2)
print(dog)
str_dog = str(dog)
print(str_dog)
三. __del__()
"""
__del__()
析构函数
调用时机:
对象在内存中被销毁删除的时候会自动调用__del__方法
1. 程序代码运行结束,在程序运行过程中,创建的所有对象和变量都会被删除销毁
2. 使用 del变量 删除变量,将这个对象的引用计数变为0,然后就会自动调用__del__方法
应用场景:
对象被删除销毁的时候,要书写的代码可以写在__del__方法中,一般很少使用
引用计数: 是Python内存管理的一种机制,是指一块内存,有多少个变量在引用,有一个变量引用计数就是1,三个变量就是3
1. 当一个变量,引用一块内存的时候,引用计数加1
2. 当删除一个变量或者这个变量不再引用这块内存时,引用计数减1
3. 当内存的引用计数变为0时,这块内存被删除,内存中的数据会被销毁
例如:
my_list = [1, 2] # 1
my_list1 = my_list # 2
del my_list # 1
def my_list1 # 2
"""
class Dog(object):
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"小狗的名字是{self.name},年龄是{self.age}"
def __del__(self):
print(f"我是__del__方法,我被调用了,{self.name}销毁了.....")
dog = Dog('小花',4)
dog2 = dog
print('第一次删除之前')
del dog
print('第一次删除之后')
print('第二次删除之前')
del dog2
print('第二次删除之后')
四. __repr__()
"""
__repr__()
调用时机:
将对象存入列表(容器)中,直接打印列表
注意点:
1. 方法必须返回一个字符串,此方法通常只有 self 一个参数
2. 和__str__不同的就是,__str__是在打印对象时输出,而__repr__是把对象放在列表(容器)中,然后打印列表输出的
"""
my_list = ['hello', 'python', 'cpp']
print(my_list)
class Dog(object):
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f'{self.name},{self.age}'
def __repr__(self):
"""
repr方法和str方法非常类似, 也是必须返回一个字符串
"""
return f'{self.name}'
my_list1 = [Dog("大黄", 2), Dog("小白", 4), Dog("小花", 6)]
print(my_list1)
dog = Dog("大黄", 2)
print(dog)
五. 使用案例
"""
烤地瓜规则:
1. 地瓜有自己的状态,默认是生的,地瓜可以进行烧烤
2. 地瓜有自己烧烤的总时间,由每次烧烤的时间累加得出
3. 地瓜烧烤时,需要提供本次烧烤的时间
4. 地瓜烧烤时,地瓜状态随着烧烤总时间的变化而变化,0-3生的,3-6半生不熟.6-8熟了,>=8烤糊了
5. 输出地瓜信息时,可以显示地瓜的状态和烧烤的总时间
封装的小套路:
1. 根据文字的描述信息,确定对象,对象有什么,就是属性
2. 根据文字的描述信息,对象能干什么,就是方法
3. 根据文字的描述信息,确定方法怎么书写
"""
class Potato(object):
def __init__(self):
self.status = '生的'
self.total_time = 0
self.name_list = []
def cook(self, time):
self.total_time += time
if self.total_time < 3:
self.status = '生的'
elif self.total_time < 6:
self.status = '半生不熟'
elif self.total_time < 8:
self.status = '熟了'
else:
self.status = '烤糊了'
def __str__(self):
buf_list = ','.join(self.name_list)
if self.name_list:
return f'地瓜的状态为{self.status}>>>>烧烤总时间为{self.total_time}>>>>调料有{buf_list}'
else:
return f'地瓜的状态为{self.status}>>>>烧烤总时间为{self.total_time}>>>>没有添加调料'
def add(self, name):
self.name_list.append(name)
potato = Potato()
print(potato)
potato.add('油')
potato.cook(4)
potato.add('辣椒面')
print(potato)
potato.cook(3)
potato.add('孜然粉')
print(potato)
"""
搬家具规则:
1. 家具分不同的类型,并且占用不同的面积
2. 输出家具信息时,显示家具的类型和家具的占用面积
_____________________
3. 房子有自己的地址和占用面积
4. 房子可以添加家具,如果房子的剩余面积可以容纳家具,则提示家具添加成,否则提示失败
5. 输出房子信息时,可以显示房子的地址,占用面积,剩余面积
"""
class Furniture(object):
def __init__(self, name, area):
self.name = name
self.area = area
def __str__(self):
return f'家具类型{self.name}>>>>占用面积{self.area}'
class House(object):
def __init__(self, address, area):
self.address = address
self.h_area = area
self.furniture_list = []
self.free_area = area
def add_furniture(self, obj_furniture):
"""
此方法用来添加家具
obj_furniture 需要是一个对象
"""
if self.free_area >= obj_furniture.area:
self.furniture_list.append(obj_furniture.name)
self.free_area -= obj_furniture.area
print(f'家具{obj_furniture.name}添加成功')
else:
print('添加失败,面积不够')
def __str__(self):
furniture_list = ",".join(self.furniture_list)
if furniture_list:
return f'房子的地址是{self.address}>>>>占用面积{self.h_area}>>>>剩余面积{self.free_area}>>>>家具有{furniture_list}'
else:
return f'房子的地址是{self.address}>>>>占用面积{self.h_area}>>>>剩余面积{self.free_area}>>>>没有家具'
bad = Furniture('沙发',15)
computer = Furniture('i9-14750F-GTX4090',5)
table = Furniture('桌子',2)
zhang_house = House('海淀',20)
zhang_house.add_furniture(bad)
zhang_house.add_furniture(computer)
zhang_house.add_furniture(table)
print(zhang_house.free_area)
print(zhang_house.furniture_list)
print(bad)
print(computer)
print(table)
print(zhang_house)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)