类的私有化
类的私有化,就是属性只允许类自身调用,不允许类以外调用
实现方法,格式:
__方法名()
__属性名
私有化作用:
1、隐藏属性,只能在类中使用
2、对私有属性的取值和赋值起到一定的限制作用
3、通过set方法限制赋值,通过get方法限制取值
class Test: //定义一个类
__name = 'tang' //定义一个私有化属性__name
name1 = 'jian' //定义一个普通属性name1
def __tang(self): //定义一个私有化方法
return '----> __tang' //返回值
def tang1(self): //定义一个普通方法tang1
return '----> ',self.__name //返回值中调用内部属性self.__name
t1 = Test() //创建一个对象
print(t1.name1) //通过对象调用name1属性
print(t1.tang1()) //通过属性调用tang1方法
print(t1.__name) //报错:AttributeError: 'Test' object has no attribute '__name'
print(t1.__tang()) //报错:AttributeError: 'Test' object has no attribute '__tang'
通过get对私有属性进行取值,通过set对私有属性进行赋值
class Test: //定义一个类
__name = 'tang' //定义一个私有属性__name并赋值
__age = 24 //定义一个私有属性__age并赋值
def get_name(self): //定义一个方法,取私有属性的值
return '__name是:{}\t__age是:{}'.format(self.__name, self.__age)
def set_name(self, name, age): //定义一个为私有属性赋值
self.__name = name //为__name进行赋值
self.__age = age //__age进行赋值
return '__name是:{}\t__age是:{}'.format(self.__name, self.__age)
//返回的值
t = Test() //创建一个对象
print(t.get_name()) //调用get_name方法,通过get_name获取私有属性的值
print(t.set_name('jian', 18)) //调用set_name方法,通过set_name方法修改私有属性的值
property装饰器
@property 装饰器是用来装饰类中的方法的
步骤:
1、在get方法上添加一个@property装饰器,函数的名字最好要简要,让调用的时候更简单
2、装饰set方法:
@属性名.setter
def 属性名(self, 参数):
pass
3、使用,
对象 = 类名(参数)
print(对象.属性名) ----> get方法
对象.属性名 = 值 ----> set方法
class Test: //创建一个类
__slots__ = ['__name', '__age'] __slots__ = 的作用是使外界能够向类中的符合条件的变量赋值
def __init__(self, name, age):
self.__name = name
self.__age = age
@property //使用property装饰器,装饰后默认getter
def name(self): //定义一个方法,调取私有属性__name的值
return '__name是:{}\t__age是:{}'.format(self.__name, self.__age)
@name.setter //这里的方法名必须和上面的方法名一致,这里是是方法name拥有setter,修改属性值
def name(self, name): //定义一个方法,方法名和上面的一致,否则报错
self.__name = name //修改的私有属性__name的值
#self.__age = int(age)
return '__name是:{}\t__age是:{}'.format(self.__name, self.__age)
t = Test('tang', 24) //定义一个类
print(t.name) //调取类中私有属性__name的值
t.name = 'haha' //调用name方法为私有属性__name赋值
print(t.name) //调取类中私有属性__name的值,你会发现时候的name属性的值已经修改了