属性即是特征,比如:洗衣机的宽度、高度、重量...
对象属性既可以在类外面添加和获取,也能在类里面添加和获取。
1、类外面添加对象属性
- 语法
对象名.属性名 = 值
- 体验
haier1.width = 500
haier1.height = 800
2、类外面获取对象属性
- 语法
对象名.属性名
- 体验
print(f'haier1洗衣机的宽度是{haier1.width}')
print(f'haier1洗衣机的高度是{haier1.height}')
3、类里面获取对象属性
- 语法
self.属性名
- 体验
# 定义类
class Washer():
def print_info(self):
# 类里面获取实例属性
print(f'haier1洗衣机的宽度是{self.width}')
print(f'haier1洗衣机的高度是{self.height}')
# 创建对象
haier1 = Washer()
# 添加实例属性
haier1.width = 500
haier1.height = 800
haier1.print_info()
"""
注意:
如果没有添加实力的属性width和height,
当执行代码的时候,执行到{self.width}会找不到属性值,
就会报错:
AttributeError: 'Washer' object has no attribute 'width'
"""
常用魔法方法
在Python中,__xx__()
的函数叫做魔法方法,指的是具有特殊功能的函数。
1、__init__()
(1)体验__init__()
思考:洗衣机的宽度高度是与生俱来的属性,可不可以在生产过程中就赋予这些属性呢?
答:理应如此。
__init__()
方法的作用:初始化对象。
示例:
"""
目标: 定义init方法设置初始化属性并访问调用
1. 定义类
init方法: width 和 height
添加实例方法:访问实例属性
2. 创建对象
3. 验证成果
调用实例方法
"""
# 1.定义类
class Washer():
# 定义初始化功能的函数
def __init__(self):
# 添加实例属性
self.width = 500
self.height = 800
def print_info(self):
# 类里面调用实例属性
print(f'洗衣机的宽度是{self.width}, 高度是{self.height}')
# 2. 创建对象
haier1 = Washer()
# 3. 调用实例方法
haier1.print_info()
注意:
__init__()
方法,在创建一个对象时默认被调用,不需要手动调用__init__(self)
中的self参数,不需要开发者传递,python解释器会自动把当前的对象引用传递过去。
(2)带参数的__init__()
思考:一个类可以创建多个对象,如何对不同的对象设置不同的初始化属性呢?
答:传参数。
# 定义类
class Washer():
# 定义带参数的init方法
def __init__(self, width, height):
self.width = width
self.height = height
# 定义实例方法
def print_info(self):
# 调用实例属性
print(f'洗衣机的宽度是{self.width}')
print(f'洗衣机的高度是{self.height}')
haier1 = Washer(10, 20)
haier1.print_info()
# 如果创建对象的时候不传递参数,会报错。
# haier2 = Washer()
haier2 = Washer(100, 200)
haier2.print_info()
2、__str__()
当使用print输出对象的时候,默认打印对象的内存地址。如果类定义了__str__
方法,那么就会打印从在这个方法中 return 的数据。
__str__
方法一般放置的是一些解释说明的文字。
示例:
class Washer():
def __init__(self, width, height):
self.width = width
self.height = height
def __str__(self):
return '这是海尔洗衣机的说明书'
haier1 = Washer(10, 20)
# 结果:这是海尔洗衣机的说明书
print(haier1)
3、__del__()
当删除对象时,Python解释器也会默认调用__del__()
方法。
示例
class Washer():
def __init__(self, width, height):
self.width = width
self.height = height
def __del__(self):
print(f'{self}对象已经被删除')
haier1 = Washer(10, 20)
# <__main__.Washer object at 0x0000026118223278>对象已经被删除
del haier1
即便不手动删除对象,也能调用到__del__()
方法,也就上面示例中,不编写最后del haier1
语句,当Python程序执行完成后,也会打印一样的结果,是Python解释器自动调用的。