对属性的值进行限制
class Person: # age 属性的值限制 0~88 | 以前可以使用 set 和 get方法 def getAge(self): return self._age # 下划线表示私有属性 # 如果用户不使用 set 那就不能进行阻止 当然写入的也不是 self._age def setAge(self, value): if 0 <= value <= 88: self._age = int(value) else: # raise Exception('age的值在 (0~99) 之间的整数') | 可以抛出异常 print('age的值在 (0~99) 之间的整数') self._age = 0 # 也可以设置默认值 (但设置默认值感觉不太好) pass if __name__ == '__main__': p = Person() p.age = 18 print(p.age) p.age = 100 # 这就不那么好 print('-' * 80) p.setAge(18) print(p.getAge()) # 18 p.setAge(100) print(p.getAge()) # 0 并输出提示信息
class Person: # 直接定义一个与属性名相同的方法 @property # 使用修饰符进行修饰 这是用于获取 def age(self): return self._age # 也是直接定义一个与属性名相同的方法 @age.setter def age(self, value): if 0 <= value <= 88: self._age = int(value) else: raise Exception('age的值在 (0~99) 之间的整数') pass if __name__ == '__main__': p = Person() p.age = 18 print(p.age) p.age = 100 print(p.age)
class Person: def __init__(self, name='张三'): self._name = name # 如果只暴露下面这一个方法 表示只允许读 不能改 (可以在实例化对象时传入初始值, 也可以设置内置) @property def name(self): self._name = '李四' return self._name if __name__ == '__main__': p = Person() p.name = '张三' # 无法设置属性 'name' print(p.name) # p.name = '张三' print(p.name)
有点短…