Python:使用@property和@xxx.setter存取内部属性

#!/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)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值