jacinli / jacinli.github.io

jacinli blog.
https://jacinli.github.io/
0 stars 0 forks source link

Python中的@property用法 #10

Open jacinli opened 5 days ago

jacinli commented 5 days ago

@property 是 Python 中的一种装饰器,用于将类的方法转换为属性。它使得我们可以像访问属性一样调用方法,并且能够控制属性的访问和设置逻辑。

使用 @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, name):
    first_name, last_name = name.split()
    self._first_name = first_name
    self._last_name = last_name

@full_name.deleter
def full_name(self):
    self._first_name = None
    self._last_name = None

使用示例

person = Person("John", "Doe") print(person.full_name) # 输出: John Doe

person.full_name = "Jane Smith" print(person.full_name) # 输出: Jane Smith

del person.full_name

在 Python 中,del 关键字可以用于删除变量、列表中的元素、字典中的键值对等。在使用 @property 时,可以通过 #@property_name.deleter 装饰器定义一个删除器方法,当对该属性使用 del 关键字时,这个方法会被调用。

print(person.full_name) # 输出: None None ` 使用 @property 装饰器将 full_name 方法转换为属性。这样可以通过 person.full_name 来访问 full_name 方法的返回值。 @property_name.setter 装饰器定义一个设置方法,用于设置属性值。在这里,我们定义了 full_name 的设置方法,它将传入的 name 分割成 first_name 和 last_name 并分别赋值给 _first_name 和 _last_name。 使用 @property_name.deleter 装饰器定义一个删除方法,用于删除属性值。在这里,我们定义了 full_name 的删除方法,它将 _first_name 和 _last_name 设置为 None。

lst = [1, 2, 3] del lst[1] print(lst) # 输出: [1, 3]