Open jacinli opened 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
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]
@property 是 Python 中的一种装饰器,用于将类的方法转换为属性。它使得我们可以像访问属性一样调用方法,并且能够控制属性的访问和设置逻辑。
使用 @property 的好处 封装:将属性的访问和设置逻辑封装在类内部,防止外部直接访问和修改属性。 数据验证:在设置属性值时,可以加入数据验证逻辑,确保属性值的有效性。 只读属性:可以创建只读属性,防止属性被修改。
`class Person: def init(self, first_name, last_name): self._first_name = first_name self._last_name = last_name
使用示例
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]