python中如何访问私有属性

本文介绍了在Python中如何访问私有属性,包括通过内部方法、property函数和装饰器。重点讲述了property函数和装饰器的使用,它们提供了更直接、高效的访问方式。

访问私有化属性的方法

简单两笔记录一下今天的学习。
我们已经知道了python中属性私有化了之后其安全性增加了不少,但是在此时我们去访问私有化属性就变得稍显繁琐。先说一下这个‘繁琐’的访问吧。

通过方法调用

这是一种抓住私有化可以从类的内部来访问而出现的一种方法,从类的内部开一条路让外部有机会来调用。
形如:

class Person:
    def __init__(self):
        self.__age = 18 #定义一个私有化属性
        pass
    def getage(self):
        return self.__age
    def setage(self,age):
        if age<0:
            print('age can not under 0')
            pass
        else:
            self.__age = age
            pass
        pass

其中getage()和setage()两个函数就是供外界调用私有化属性的方法。
你可以:

p1 = Person()
print(p1.getage)

这样你可以访问到私有化的属性
但是,很繁琐,就像你想和你心爱的女朋友聊天却不得不通过她的好闺蜜来传话一样,你不能直接触碰属性,而是要通过‘方法’来调用。
别慌,python为你准备了其他的路径。

方法一:property函数

这个方法很easy,你只需要在原有的代码基础上加上一行简单的代码,便可以越过‘好闺蜜’,这样:

class Person:
    def __init__(self):
        self.__age = 18 #定义一个私有化属性
        pass
    def getage(self):
        return self.__age
    def setage(self,age):
        if age<0:
            print('age can not under 0')
            pass
        else:
            self.__age = age
            pass
        pass
    #propert函数来实现直接访问私有属性
    age = property(getage,setage)

最后一行的:age = property(getage,setage) 便是property函数的体现,有了它我们可以:

p1 = Person()
print(p1.age)

看看输出:

18

ok!越过闺蜜了!
这是属于函数的胜利,emm…还是调用了函数
但是,或许我们可以再越过的舒服一点?

方法二:装饰器

给我们最开始的代码装上装饰器再稍加改动:

class Person:
    def __init__(self):
        self.__age = 18 #定义一个私有化属性
        pass
    @property 
    def age(self):
        return self.__age
    @age.setter
    def age(self,age):
        if age<0:
            print('age can not under 0')
            pass
        else:
            self.__age = age
            pass
        pass

然后看看调用:

p1 = Person()
print(p1.age)

输出:

18

alright!我们做到了,与亲爱的她面对面接触!
通过添加装饰器,使我们可以直接调用私有化的属性,这种方法在日常的场景中使用较多。上面的@property是给了我们调用私有化属性的权利,而@age.setter则给了我们修改私有化属性的权利。
我们可以这样:

print(p1.age)
p1.age = 16
print(p1.age)

输出是这样的:

18
16

简洁美丽,重返十六岁!
使用方法:@property直接添加即可,@xxx.setter则是将事先设置好的修改方法的方法名加在setter前即可。

小结

访问私有化属性这里提供三种方法:
1.内部方法调用
2.property函数调用
3.修饰器调用
三种方法各有千秋,但是总得来看第三种是优于前两种的,因为其提供给了我们直接去访问属性的方法,避开了路上的曲折,使得效率更高。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值