python面向对象02--私有化和常用的魔术方法

122 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 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两种方法让其在外部可以进行更改

私有化的好处

  1. 隐藏属性不被外界随意修改
  2. 也可以通过定义方法进行修改,因为这里的方法是我们自己定义,所以我们可以制定修改需要遵守的规则
  3. 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的参数,并且自定义对象格式化的规则