代码改变世界

Python面向对象高阶-描述符与设计魔术方法

2021-12-22 16:16  何小六soso  阅读(36)  评论(0编辑  收藏  举报

Python面向对象高阶-描述符与设计魔术方法

描述符

当一个类包含了三个魔术方法之一就成为描述符类,三个方法(get,set___,delete)

作用

描述符的作用就是对一个类中的某个成员进行一个详细的管理操作(获取,修改,删除)

描述符就是代理了一个类中的成员操作

代码示例

# 描述符类实际应用
# 定义学生类,记录id,名字,分数
# 学员的分数只能在1-100之间
'''
解决方法:
    在init中检查score的范围,但只能在初始化时约束,初始化成功后还可以使用self.score进行更改
    使用__setattr__(self, key, value)可以判断解决
    使用描述符代理解决
'''
class Score():
    __score = 1

    def __get__(self, instance, owner):
        return self.__score

    def __set__(self, instance, value):
        if value > 0 and value <= 100:
            self.__score = value
        else:
            print('重新输入')


class Student():
    score = Score()

    def __init__(self, id, name, score):
        self.id = id
        self.name = name
        self.score = score

    def returnMe(self):
        return f'''
        编号:{self.id}
        姓名:{self.name}
        成绩:{self.score}
        '''


# 实例化对象
s = Student('1', 'python', 11)
print(s.returnMe())
s.score = -99
print(s.returnMe())

设计模式

代码步骤和设计进行总结和归纳形成设计模式

设计模式是面向对象编程的设计

单例设计模式