前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python:状态模式

python:状态模式

作者头像
超级大猪
发布2019-11-22 09:36:37
3030
发布2019-11-22 09:36:37
举报
文章被收录于专栏:大猪的笔记

python允许在运行时打“热补丁”,也就是替换掉类的函数。这让状态模式的实现变的简单。 下面是一个权限验证的鬼畜例子,由于类对象的内部发生了状态变化,所以你没办法知道对象最终是什么状态。所以这个对象是一次性的。不能重复使用。

代码语言:javascript
复制
import types

class Role(object):
    def __init__(self):
        self.check = types.MethodType(check_admin, self)


def check_admin(self, power):
    if power > 10:
        print("is admin")
    else:
        # 开始发生状态转换
        self.check = types.MethodType(check_user, self)
        self.check(power)


def check_user(self, power):
    if 0 < power <= 10:
        print("is user")
    else:
        self.check = types.MethodType(check_block, self)
        self.check(power)

def check_block(self, power):
    print("is block")


def check(power):
    obj = Role()
    obj.check(power)

check(5)

更好的做法应该是,让用户来决定对象的状态,这会让程序变的明确。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-07-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档