2018-08-01 python学习面向对象(getting与

2018-08-01  本文已影响0人  随雪而世

属性假的私有化:声明对象属性的时候,在属性名前面加一个'_',来告诉别人这个属性不可以直接使用。 要通过getter和setter来获取属性的和修改属性的值

1.getter: 获取属性的值

@property
def 属性名(去掉下划线)(self):
    return 返回值
如果在获取对象的某个属性前需要再干点儿别的事情,就给属性添加getter
  1. setter: 给属性赋值
    一个属性必须要有getter,才能添加setter。
@属性名(去掉下滑线).setter
def 属性名去掉下划线(self, 变量名):
    给带下划线的属性赋值
如果在给对象的某个属性赋值前需要再干点儿别的事情,就给属性添加setter
class Student:
    """学生类"""
    def __init__(self):
        # 声明属性的时候前面加一个'_'是为了告诉别人这个属性不能直接使用
        self._name = ''
        self._score = 0
        self._age = 0

    #  给属性_name添加getter
    @property
    def name(self):
        return self._name

    #  给属性_name添加setter
    @name.setter
    def name(self, value):
        self._name = value

    @property
    def age(self):
        return str(self._age)+'岁'

    @age.setter
    def age(self, age):
        if age >= 150 or age < 0:
            print('赋值有误,age要求是0-150的值')
            # raise 抛出异常: raise 错误类型
            # raise ValueError
            self._age = None
            return
        self._age = age


if __name__ == '__main__':
    stu1 = Student()
    # 不添加getter和setter
    # stu1._name = '张三'
    # print(stu1._name)

    # 添加getter和setter
    stu1.name = '李四'     
    #去掉了getting与setting后,发现能正常运行,其实是重新添加了一个新属性name
    
    print(stu1.name)

    stu1.age = 20
    print(stu1.age)
上一篇 下一篇

猜你喜欢

热点阅读