python私有属性和私有方法场景应用

python的私有属性和方法,大概理解为,外部不能直接访问。但是其实并不保密,通过dir()可以查看。

一,私有属性

通过dir()就能查找到该属性,并可以直接查看属性

class Person(object):
    def __init__(self, name, age):
        self.name = name
        self.__age = age
        
    #定义访问私有属性功能
    def get_age(self):
        return self.__age

    def set_age(self, age):
        self.__age = age

p1 = Person('Lan', 18)
print(dir(p1))
print(p1._Person__age)
# 使用get方法,可以直接调用私有属性
print(p1.get_age())

结果:

结论:

1.Python的私有属性并不是完全禁止外部访问

2.使用get,set方法可以对私有属性进行赋值和获取,在类的外部也可以使用他

那既然看起来同样会被外部访问,那私有属性的意义何在呢?

通过上述的get,set方法对属性修改,如果在这些模块中,加入判断逻辑,保证数据输入的准确性。以下为例子


class Person1(object):
    def __init__(self, name, age):
        self.name = name
        self.__age = age

    def get_age(self):
        # 告知的年龄比真实年龄小5岁,小于18岁就是18岁
        age = self.__age - 5
        if age < 18:
            return 18
        else:
            return age

    def set_age(self, age):
        # 重置的年龄在0到100之间,大于100就是100,小于0就是0
        if age > 100:
            self.__age = 100
        elif age < 0:
            self.__age = 0
        else:
            self.__age = age

p1 = Person1('Lan', 35)
# get方法已设置提取规则
print(p1.get_age())
# 录入数据已设置规则和约束
p1.set_age(115)
print(p1.get_age())

通过这个案例,私有属性结合自定义方法使用,添加约束和规则,保护数据,同理可以约束身份证号是否规范,手机号码是否规范等。

二、私有方法

流程化的方法,外部不需要知道过程,直接可以利用私有方法封装到一起,简化程序运行

'''
大象装冰箱,总共分三步
1.打开冰箱
2.放大象
3.关上冰箱
但是这里并不想关心过程,只想一个操作告知我上述都完成了
'''
class Elephantgofridge:
    def __openfridge(self):
        print('打开冰箱')
    def __putelephant(self):
        print('放大象')
    def __closefridge(self):
        print('关上冰箱')
    def elegofri(self):
        self.__openfridge()
        self.__putelephant()
        self.__closefridge()
        print('大象装好了')
        
e1=Elephantgofridge()
e1.elegofri()

结果直接完成所有步骤,不需要每一个方法都挨个执行

以上总结,私有属性可以规范数据读写规则,私有方法简化代码运行。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值