访问私有化属性的方法
简单两笔记录一下今天的学习。
我们已经知道了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.修饰器调用
三种方法各有千秋,但是总得来看第三种是优于前两种的,因为其提供给了我们直接去访问属性的方法,避开了路上的曲折,使得效率更高。
本文介绍了在Python中如何访问私有属性,包括通过内部方法、property函数和装饰器。重点讲述了property函数和装饰器的使用,它们提供了更直接、高效的访问方式。

4201

被折叠的 条评论
为什么被折叠?



