57. 请简述保护类的属性?

如何保护类的属性?

(1)、把属性定义为私有属性,即在属性名的前面加上两个下划线;
(2)、添加用于设置或者获取属性值的两个方法供外界调用。

 

如果有一个对象,当需要对其进行修改属性时,有2种方法

  • 对象名.属性名 = 数据 ---->直接修改
  • 对象名.方法名() ---->间接修改

为了更好的保存属性安全,即不能随意修改,一般的处理方式为

  • 将属性定义为私有属性

添加一个可以调用的方法,供调用

1.单下划线

变量前的单下划线表示表面上私有 ,但是其实这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”。

 

2.双下划线

变量前的双下划线表示真正的私有,实际上的私有,只有内部可以访问,外部不能访问 

但是有窍门,可以在类里面增加get__namededeset__namedede这样的方法来突破限制,而且还能在方法里做验证。

 

类的三种属性

1.共公属性:允许随意访问 self.name=name

2.受保护的属性:允许直接访问,但不建议直接访问 self._age=age

3.私有属性:拒绝直接访问 self.__job=job

 

所有权限相关设置在类内都不受影响。

一般受保护的属性是通过方法进行访问

class Dog(object):
    def __init__(self,name,age,job):
        self.name=name
        self._age=age
        self.__job=job
    def set_age(self,age):
        return self._age=age
    def get_age(self):
        return self._age

私有的属性一般是拒绝访问的

class Dog(object):
    def __init__(self,name,age,job):
        self.name=name
        self._age=age
    @property
    def job(self):
        return self.__job

正常情况下调用方法需要dog.job()# 加上@property以后,调用方法就不需要加括号了,直接dog.job# 只要出现这样的写法,在外部调用.job就不是访问job属性,而是调用job()方法

如果设置了@property访问属性,就可以继续设置修改属性的写法

class Dog(object):
    def __init__(self,name,age,job):
        self.name=name
        self._age=age
    @property
    def job(self):
        return self.__job
    @job.setter
    def job(self,job)
        if job=="code":
            print('no')
        else:
            self.__job=job

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值