1.@property
在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把性别随便改:
实例:
# -*- coding: utf-8 -*-
# @Time : 2022/4/8 17:05
# @File : property1.py
# @Software : PyCharm
class Person(object):
def __init__(self, name, gender, age):
self.name = name
self.gender = gender
self.age = age
p = Person('张三', 100, 20)
print(p.gender)
p.gender = '公'
print(p.gender)
运行结果:
100
公
虽然我们可以使用通过一个set_gender()方法来限定设置的性别,但是这样做略显复杂,没有直接用属性这么直观简单。
Python内置的@property装饰器就可以实现把一个方法变成属性调用。
# -*- coding: utf-8 -*-
# @Time : 2022/4/8 16:06
# @File : property.py
# @Software : PyCharm
class Person(object):
def __init__(self, name, gender, age):
self._name = name
self.gender = gender
self._age = age
@property
def gender(self):
return self._gender
@gender.setter
def gender(self, value):
if not isinstance(value, str):
raise ValueError('gender must be a string!')
if not (value == '男' or value == '女'):
raise ValueError('gender must be 男 or 女')
self._gender = value
p = Person('张三', '男', 20)
print(p.gender)
# 错误
# p = Person('张三',100,20 )
# 错误
# p.gender = '公'
p.gender = '女'
print(p.gender)
运行结果:
男
女