什么叫私有变量,python中表示私有变量是__(双下划线)加变量名表示,为什么要私有,就好像你老子又不是什么东西都想给你,开个玩笑哈哈哈哈,那究竟是为什么呢,第一你发现我们想改某个属性的时候,是没有限制的,第二我们有些东西是不想被外面直接修改的,第三我们有时候读都不想让读的,所以.........看下面把:
class student():
def __init__(self,name,age):
self.name=name
self.__age=age
student1=student('陈逸灏',20)
print(student1.age)
你会发现会报错——AttributeError: 'student' object has no attribute 'age'
原因是这个变量是类里面私有的,外面无法访问,那句有人会想我age找不到,那__age不就可以了吗,然后
class student():
def __init__(self,name,age):
self.name=name
self.__age=age
student1=student('陈逸灏',20)
print(student1.__age)
继续报错————AttributeError: 'student' object has no attribute '__age',这就说明不是这个原因,我们如果想看这个属性究竟是什么,可以用print(student1.__dict__)打印出我们student1这个对象的所有属性,结果如下:
{'name': '陈逸灏', '_student__age': 20}
从上面可以看到其实我们的属性是_student__age,也就是_类名加上__属性名,这也其实是python的障眼法,其实就是把变量名改了,但这样其实也没有做到真正的私有化,所以我们要学习下面的方法:
class wife():
def __init__(self,name,age,weghit):
self.name=name
self.set_age(age)
self.__weghit=weghit
def get_age(self):
return self.__age
def set_age(self,values):
if 20<=values<=30:
self.__age=values
else:
raise ValueError('不可以哦')
那么我们现在就可以用get_age的方法来查看我们的私有age属性,我们用set_age的方法来限制我们age的范围,那么我们就可以:
wife1=wife('迪丽热巴',20,100)
#答印私有年龄 print(wife1.get_age())
#修改私有年龄 wife1.set_age(30)
这样不就可以做到了吗?其实这只是一个最简单的方法,而且你会发现很麻烦,下面讲一个简单的方法python中其实自带property方法,用法如下:
class wife():
def __init__(self,name,age,weghit):
self.name=name
self.__age=age
self.__weghit=weghit
@property
def age(self):
return self.__age
@age.setter
def age(self,vaules):
if 20<=vaules<=40:
self.__age=vaules
else:
raise ValueError('不可以哦')
@property
def weghit(self):
return self.__weghit
@weghit.setter
def weghit(self,vaules):
if 20<=vaules<=40:
self.__weghit=vaules
else:
raise ValueError('不可以哦')
@property表示读取,@age.setter表示修改,这样就做到既可以私有,又可以直接用原有变量来进行操作,切记子类无法继承父类私有方法和属性
class wife1(wife):
def __init__(self,name,age,weghit):
wife.__init__(name,age,weghit)
自己不信可以,。。。。。。试下



