Python入门与实践 Chapter 9 动手试一试

9-3 用户 : 创建一个名为User 的类, 其中包含属性first_name 和last_name , 还有用户简介通常会存储的其他几个属性。 在类User 中定义一个名
为describe_user() 的方法, 它打印用户信息摘要; 再定义一个名为greet_user() 的方法, 它向用户发出个性化的问候。
创建多个表示不同用户的实例, 并对每个实例都调用上述两个方法。

9-5 尝试登录次数 : 在为完成练习9-3而编写的User 类中, 添加一个名为login_attempts 的属性。 编写一个名为increment_login_attempts() 的方法,
它将属性login_attempts 的值加1。 再编写一个名为reset_login_attempts() 的方法, 它将属性login_attempts 的值重置为0。
根据User 类创建一个实例, 再调用方法increment_login_attempts() 多次。 打印属性login_attempts 的值, 确认它被正确地递增; 然后, 调用方
法reset_login_attempts() , 并再次打印属性login_attempts 的值, 确认它被重置为0。

9-7 管理员 : 管理员是一种特殊的用户。 编写一个名为Admin 的类, 让它继承你为完成练习9-3或练习9-5而编写的User 类。 添加一个名为privileges 的属性, 用
于存储一个由字符串(如”can add post” 、 “can delete post” 、 “can ban user” 等) 组成的列表。 编写一个名为show_privileges() 的方法, 它
显示管理员的权限。 创建一个Admin 实例, 并调用这个方法。

9-8 权限 : 编写一个名为Privileges 的类, 它只有一个属性——privileges , 其中存储了练习9-7 所说的字符串列表。 将方法show_privileges() 移到这
个类中。 在Admin 类中, 将一个Privileges 实例用作其属性。 创建一个Admin 实例, 并使用方法show_privileges() 来显示其权限。


实现上述题目的代码如下:

from enum import Enum


# 9-3 9-5 9-7
class Male(Enum):
    MAN = 0
    WOMAN = 1


class User:
    def __init__(self, first_name, last_name, male):
        self.__first_name = first_name
        self.__last_name = last_name
        self.__male = male
        self.__login_attempts = 0

    def describe_user(self):
        print("User " + self.__first_name + ' ' + self.__last_name + "is a " + self.__male.name + '.')

    def greet_user(self):
        print("GOD BLESS YOU, " + self.__first_name.upper() + ' ' + self.__last_name.upper())

    def increment_login_attempts(self):
        self.__login_attempts += 1

    def print_login_attempts(self):
        print(self.__login_attempts)

    def reset_login_attempts(self):
        self.__login_attempts = 0

    def get_fist_name(self):
        return self.__first_name


class Admin(User):
    def __init__(self, first_name, last_name, male):
        super().__init__(first_name, last_name, male)
        self.__privileges = ['can add post', 'can delete post', 'can ban user']

    def show_privileges(self):
        for i in range(0, len(self.__privileges)):
            print("Admin " + super().get_fist_name() + " " + self.__privileges[i] + '.')


Simon = User(first_name='Peter', last_name='Simon', male=Male.MAN)
Andrew = User(first_name='Andrew', last_name='Simon', male=Male.MAN)
James = User(first_name='James', last_name='Zebedee', male=Male.MAN)
Simon.describe_user()
Andrew.describe_user()
James.describe_user()
Simon.greet_user()
Andrew.greet_user()
James.greet_user()

James.print_login_attempts()
James.increment_login_attempts()
James.print_login_attempts()
James.reset_login_attempts()
James.print_login_attempts()

Jesus = Admin(first_name='Jesus', last_name='Christ', male=Male.MAN)
Jesus.show_privileges()

输出如下:


User Peter Simonis a MAN.
User Andrew Simonis a MAN.
User James Zebedeeis a MAN.
GOD BLESS YOU, PETER SIMON
GOD BLESS YOU, ANDREW SIMON
GOD BLESS YOU, JAMES ZEBEDEE
0
1
0
Admin Jesus can add post.
Admin Jesus can delete post.
Admin Jesus can ban user.

Process finished with exit code 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值