一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第15天
私有化
可以简单的理解为将属性隐藏
class Student:
# 魔术方法初始化属性
def __init__(self,name,age,socre):
self.__name = name
self.__age = age
self.__socre = socre
#定义set和get方法
def set_age(self,age):
if age > 4 and age < 25:
self.__age = age
else:
print('年龄超出范围')
def get_age(self):
return self.__age
def set_name(self,name):
if len(name) > 1 and len(name) < 5:
self.__name = name
else:
print('名字不符合要求')
def get_name(self):
return self.__name
# 魔术方法得到最后结果
def __str__(self):
return '姓名:{},年龄:{},分数:{}'.format(self.__name,self.__age,self.__socre)
封装📦:因为封装后私有化的属性无法在外界更改,所以我们得使用set,get两种方法让其在外部可以进行更改
私有化的好处:
- 隐藏属性不被外界随意修改
- 也可以通过定义方法进行修改,因为这里的方法是我们自己定义,所以我们可以制定修改需要遵守的规则
- set方法是进行修改,而get方法时进行获取(规范命名)
魔术方法
魔术方法就是一个类/对象中的方法,和普通方法唯一的不同时,普通方法需要调用!而魔术方法是在特定时刻自动触发。
- __ init __(初始化魔术方法)
触发时间:初始化对象的时候触发
参数:至少有一个self
返回值:无
作用:初始化对象的成员
注意:使用此方法初始化的成员是直接写入对象中的,类中不具有
- __ new __ (实例化魔术方法)
触发时间:在实例化时触发
参数:至少一个cls接受当前类
返回值:必须返回一个对象实例
作用:实例化对象
注意:实例化对象是Object类底层实现,其他类继承了Object的new才能够实现实例化对象是Object类底层实现,其他类继承了Object的new才能够实现实例化对象。 没事别碰这个魔术方法,先触发new才会触发init实例化对象。 没事别碰这个魔术方法,先触发__ new __ 才会触发__ init __
- __ del __(析构魔术方法)
触发时间:当对象没有用(没有任何变量引用)的时候被触发
参数:至少一个cls接受对象
返回值:无
作用:使用完全对象是回收资源
注意:del不一定触发当前方法,只有当前对象没有任何变量接收时才会触发
- __ str __
触发时间:使用print(对象)或者str(对象)的时候触发
参数:一个self接收对象
返回值:必须是字符串类型
作用:print(对象时)进行操作,得到字符串,通常用于快捷操作
- __ bool __
触发时间:使用bool(对象)的时候触发
参数:一个self接收对象
返回值:必须是布尔值
作用:根据实际情况决定,可以作为快捷方式使用
注意:仅适合于返回布尔值的操作
- __ format __
触发时间:使用字符串.format(对象)时候触发
参数:一个self接收对象,一个参数接收format的{}中的格式,例如:>5
返回值:必须是字符串
作用:设置对象可以作为format的参数,并且自定义对象格式化的规则