知识点
@property
是 Python 中用于将类方法转变为属性访问的装饰器,它可以让你以属性的形式访问类的某些方法,从而提供了更简洁的语法。
通常情况下,属性访问会通过 obj.attribute
这样的方式进行,但是如果你希望在获取或者设置属性的时候执行一些逻辑,可以使用 @property
来实现这个目的。
以下是 @property
的基本用法示例:
class Person:
def __init__(self, first_name, last_name):
self.first_name = first_name
self.last_name = last_name
@property
def full_name(self):
return f"{self.first_name} {self.last_name}"
@full_name.setter
def full_name(self, value):
first, last = value.split(' ')
self.first_name = first
self.last_name = last
@full_name.deleter
def full_name(self):
del self.first_name
del self.last_name
# 创建一个Person实例
p = Person('John', 'Doe')
# 使用@property访问full_name
print(p.full_name) # 输出: John Doe
# 使用@property setter方法设置full_name
p.full_name = 'Jane Smith'
print(p.full_name) # 输出: Jane Smith
# 使用@property deleter方法删除full_name
del p.full_name
# 尝试访问被删除的属性将引发AttributeError
print(p.full_name) # 输出: AttributeError: 'Person' object has no attribute 'full_name'
在上述示例中:
full_name
方法被装饰为@property
,所以可以像访问属性一样访问它。@full_name.setter
装饰器允许我们在设置属性时执行一些逻辑,这里将一个完整的名字拆分成了名字和姓氏。@full_name.deleter
装饰器定义了一个用于删除属性的方法。
使用 @property
装饰器可以让你在需要执行额外逻辑时,以属性的形式访问类的方法,使得代码更加清晰和简洁。
学习测试代码
"""
# -*- coding: utf-8 -*-
# @Time : 2023/9/21 9:54
# @Author : 王摇摆
# @FileName: practice2.py
# @Software: PyCharm
# @Blog :https://blog.csdn.net/weixin_44943389?type=blog
"""
# 请利用@property给一个Screen对象加上width和height属性,以及一个只读属性resolution
class Screen(object):
@property
def width(self):
return self._width
@width.setter
def width(self, width):
self._width = width
@property
def height(self):
return self._height
@height.setter
def height(self, height):
self._height = height
@property
def resolution(self):
return self._width * self._height
if __name__ == '__main__':
# 测试:
s = Screen()
s.width = 1024 # s.width(100)
s.height = 768
print('resolution =', s.resolution)
if s.resolution == 786432:
print('测试通过!')
else:
print('测试失败!')