piglei / one-python-craftsman

来自一位 Pythonista 的编程经验分享,内容涵盖编码技巧、最佳实践与思维模式等方面。

Home Page:https://www.piglei.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

关于EP13的一点小小的建议

sun-yahao opened this issue · comments

例子的代码这么写是不是会更舒服?因为感觉上判断修改应该是类内部的逻辑。

class User(Model):
    """普通用户模型类
    """
    def __init__(self, username: str):
        self.username = username

    def allow_deactivate(self) -> bool:
        """是否允许被停用
        """
        return True

    def _deactivate(self):
        """将当前用户停用
        """
        self.is_active = True
        self.save()

    def deactivate(self) -> bool:
        """将当前用户停用
        """
        if self.allow_deactivate():
            self._deactivate()
            return True
        else:
            return False

class Admin(User):
    """管理员用户类
    """
    def allow_deactivate(self) -> bool:
        # 管理员用户不允许被停用
        return False

def deactivate_users(users: Iterable[User]):
    """批量停用多个用户
    """
    for user in users:
        is_deactivated = user.deactivate()
        if not is_deactivated:
            logger.info(f'user {user.username} does not allow deactivating, skip.')

另外,停用之后is_active变成了True,是不是反了?

感谢建议,你给的例子也是合理的。在实际编程时,我们也确实可以把方法设计成这样。文章里的代码,主要是为了演示里式替换原则。而从演示的角度看,我希望修改后的例子和修改前差别尽量小一点,所以没有做更大的改动,保留把判断放在外部 deactivate_users 函数中。

  • is_active 是写反了,应该是 False

感谢回复。