#!/usr/bin/env python
# coding:UTF-8
"""
@version: python3.x
@author:曹新健
@contact: 617349013@qq.com
@software: PyCharm
@file: property和setter.py
@time: 2018/9/29 15:08
"""
class Person():
def __init__(self,name,age,pay=0):
self.__name = name
self.__age = age
self.__pay = pay
#双下划线开头的变量为内部变量,不能被外部直接调用
#通过内部方法存取数据
def getName(self):
return self.__name
def setName(self,name):
self.__name =name
#以上两种方法存取数据的方式为:类实例.方法名,比如p.getName() p.setName("Tom Smith")
'''
为了准守统一存取原则,需要使用@property和@xxx.setter,这样无论是否为内部属性均可以使用
类实例.属性名 的方式调用了,比如p.age p.age=age
注意使用@property和@xxx.setter定义的方法名称必须是属性名称去掉双下划线
'''
@property
def age(self):
return self.__age
@age.setter
def age(self,age):
if age > 0:
self.__age = age
'''
说明:
被@property标注的xxx取值方法,可以使用@xxx.setter标注对应的设置值方法,使用@xxx.deleter
标注对应的删除值方法。取值方法返回的值可以是实时运算的结果,在设置值得方法中必要时可以
使用流程控制语句来实现一些存取控制。
'''
if __name__ == "__main__":
p = Person("cxj",18,40000)
print(p.getName())
p.setName("Tom Smith")
print(p.getName())
print(p.age)
p.age = 28
print(p.age)