← 返回首页
Python3基础教程(三十八)
发表时间:2022-04-08 17:10:18
使用@property

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)

运行结果:

男
女