附day1.2的访问如何访问私有属性的问题~(^ ~ ^)~
-
内部方法调用
-
property函数
-
装饰器
一、内部方法调用
通过私有化可以从类的内部来访问而实现的一种方法
class Person():
def __init__(self):
self.__lover = '莹莹' # 定义一个私有属性
pass
def getlover(self):#方法
return self.__lover
def setlover(self,lover):#方法
if lover=='':
print('不可能没有心上人')
pass
else:
self.__lover=lover
pass
pass
其中getlover()和setlover()两个函数就是供外界调用私有化属性的方法。(注:end=''可以使打印不换行欧)
p1=Person()
print("我的心上人是可爱的",end='')
print(p1.getlover())
这样就可以成功的访问到私有化的属性了,实现的结果如下:
二、property函数
此方法比较简单,仅仅需要加入一行代码即可
class Person():
def __init__(self):
self.__lover = '莹莹' # 定义一个私有属性
pass
def getlover(self):#方法
return self.__lover
def setlover(self,lover):#方法
if lover=='':
print('不可能没有心上人')
pass
else:
self.__lover=lover
pass
pass
#property函数是用来实现直接访问私有属性的
lover=property(getlover,setlover)
lover=property(getlover,setlover)就是porperty函数的体现,接下来就通过以下代码来访问私有变量了:
p1=Person()
print("我的心上人是我可爱的宝贝",end='')
print(p1.lover)
实现结果如下:
芜湖~就这样就直接实现了,较第一种方法,咱们直接就访问到了lover而没有通过getlover方法去访问欧~
三、装饰器
需要我们在最开始的代码上装上装饰器来进行改动,改动如下:
class Person():
def __init__(self):
self.__lover = '莹莹' # 定义一个私有属性
pass
@property
def lover(self):#方法
return self.__lover
@lover.setter
def lover(self,lover):#方法
if lover=='':
print('不可能没有心上人')
pass
else:
self.__lover=lover
pass
pass
调用方法如下:
p1=Person()
print("我的心上人是我可爱的宝贝",end='')
print(p1.lover)
输出结果如下:
@property给了我们调用私有化属性的权利
@lover.setter给了我们修改私有化属性的权利
修改操作如下:
p1=Person()
print("我的心上人是我可爱的宝贝",end='')
print(p1.lover)
p1.lover='菀菀'
print("嘿嘿嘿!其实我的真正的心上人是我可爱的宝贝",end='')
print(p1.lover)
那么输出结果就会变成这样子了:
语法:
@property:直接添加即可
@XXX.setter:在设置好的修改方法的方法名前加上setter即可