Python-9.2-类-练习

练习一:创建一个名为 Restaurant 的类

  • 其方法__init__()设置两个属性
    • restaurant_name 和 cuisine_type
  • 创建一个名为describe_restaurant()的方法
    • 打印前述两项属性的信息
  • 创建一个名为open_restaurant()的方法
    • 打印一条信息,指出餐馆正在营业
  • 根据编写的类,分别打印其两个属性,再调用两个方法
class Restaurant():
    """一次餐馆简介的尝试"""
    
    def __init__(self, restaurant_name, cuisine_type):
        """初始化餐馆的属性"""
        self.restaurant_name = restaurant_name
        self.cuisine_type = cuisine_type
        return None
    
    def describe_restaurant(self):
        """返回餐馆整洁的描述信息"""
        print("The restaurant name is " +  self.restaurant_name.upper() +  ".")
        print("The restaurant cuisine type is " + self.cuisine_type +  ".")
        return None
    
    def open_restaurant(self):
        """描述餐馆正在营业"""
        print(self.restaurant_name.upper() + " is opening.")
        return None
        
kfc_restaurant = Restaurant('kfc', 'fast food')
# 访问属性
print(kfc_restaurant.restaurant_name.upper())
print(kfc_restaurant.cuisine_type)
# 调用方法
kfc_restaurant.describe_restaurant()
kfc_restaurant.open_restaurant()

KFC
fast food
The restaurant name is KFC.
The restaurant cuisine type is fast food.
KFC is opening.

练习二:创建一个名为User的类

  • 其方法 init() 设置属性
    • first_name, last_name, maiddle_name, age, fruit, login_attempts
  • 创建一个名为describe_user()的方法
    • 它打印用户信息摘要
  • 定义一个名为greet_user()的方法
    • 它向用户发出个形化的问候
  • 编写一个名为increment_login_attempts()的方法
    • 它将属性login_attempts的值加1
  • 再编写一个名为reset_login_attempts()的方法
    • 它将属性login_attempts的值重置为10
  • 根据User类创建一个实例,再调用方法increment_login_attempts()多次
    • 打印属性login_attempts的值,确认它被正确地递增
    • 调用方法reset_login_attenpts(),并在此打印属性login_attempts的值,确认它被重置为0
class User():
    """一次记录用户登陆次数的尝试"""
    
    def __init__(self, first_name, last_name, 
                 age, middle_name=''):
        """初始化描述用户的属性"""
        self.first_name = first_name
        self.last_name = last_name
        self.age = age
        # 设置该默认属性为0
        self.login_attempts = 10
        self.middle_name = middle_name
        return None
    
    def describe_user(self):
        """返回整洁的描述信息"""
        fs_name = self.first_name + " " + self.last_name
        fms_name = self.first_name + " " + self.middle_name + " " + self.last_name
        # 检测实参是否含有中间名
        if self.middle_name:
            print(fms_name.title(), "is", str(self.age),"years old.")
        else:
            print(fs_name.title(), "is", str(self.age), "years old.")
        return None
    
    def greet_user(self):
        """向用户发出个性化问候"""
        fs_name = self.first_name + " " + self.last_name
        fms_name = self.first_name + " " + self.middle_name + " " + self.last_name
        # 检测是否含有中间名
        if self.middle_name:
            print("Hellow", fms_name.title(), ", Welcome to Python.")
        else:
            print("Hellow", fs_name.title(), ", Welcome to Python.")
        return None
    
    def increment_login_attempts(self):
        """将登陆的次数增加特定的量"""
        self.login_attempts += 1
        return None
    
    def reset_login_attempts(self):
        """重置登陆的次数"""
        self.login_attempts = 0
        print("The login attempts have been reset.")
        return None
    
# 调用类
jwc = User('john', 'croft', 5, 'william')
# 调用类中问候语的方法
jwc.greet_user()
# 调用类中描述的方法
jwc.describe_user()
# 调用递增登陆次数的方法
jwc.increment_login_attempts()
print("The login attempts are " + str(jwc.login_attempts) + ".")
# 再次调用递增登录次数的方法
jwc.increment_login_attempts()
print("The login attempts are " + str(jwc.login_attempts) + ".")

print()

ae = User('albert', 'einstein', 10)
ae.greet_user()
ae.describe_user()
ae.increment_login_attempts()
# 调用重置登陆次数的方法
ae.reset_login_attempts()
print("The login attempts are " + str(ae.login_attempts) + ".")

Hellow John William Croft , Welcome to Python.
John William Croft is 5 years old.
The login attempts are 11.
The login attempts are 12.

Hellow Albert Einstein , Welcome to Python.
Albert Einstein is 10 years old.
The login attempts have been reset.
The login attempts are 0.

练习三:管理员是一种特殊的用户

  • 编写一个名为 Admin 的类

    • 让它继承练习二而编写的 User 的类
  • 编写一个名为 Privileges 的类

    • 添加一个名为 privileges 的属性
      • 用于存储一个由字符串(“can add post”, “can delete post”, “can ban user”)组成的列表
    • 编写一个名为 show_privileges()的方法
      • 它显示管理员权限
  • 在Admin类中,将一个 Privileges() 实例用作其属性

  • 创建一个 Admin 实例,并使用方法 show_privileges() 来显示其权限

  • 注意:

    • 当子类继承父类时,子类接受了父类所有属性,给父类属性赋值时,super()包含的是父类的所有属性,不用加默认值,空字符串
    • 当实例用作属性时,给实例重新赋值时,再创建新的实例时应给默认值self.battery_size = Battery(80)。调用时应 my_tesla.battery_size = Battery(50000)
class User():
    """一次记录用户登陆次数的尝试"""
    
    def __init__(self, first_name, last_name, age, middle_name=''):
        """初始化描述用户的属性"""
        self.first_name = first_name
        self.last_name = last_name
        self.age = age
        self.login_attempts = 10
        self.middle_name = middle_name
        return None
    
    def describe_user(self):
        """返回整洁的描述信息"""
        fms_name = self.first_name + " " + self.middle_name + " " + self.last_name
        print(fms_name.title(), "is", str(self.age), "years old。")
        return None
    
    def greet_user(self):
        """向用户发出个性化问候"""
        fms_name = self.first_name + " " + self.middle_name + " " + self.last_name
        print("Hellow", fms_name.title(),  ", Welcome to Python.")
        return None
    
    def increment_login_attempts(self):
        """将登陆的次数增加特定的量"""
        self.login_attempts += 1
        return None
    
    def reset_login_attempts(self):
        """重置登陆的次数"""
        self.login_attempts = 0
        print("The login attempts have been reset.")
        return None
    
class Privileges():
    """管理员权限"""
    def __init__(self, privileges=''):
        self.privileges = privileges
        return None
    
    def show_privileges(self):
        """显示管理员的权限"""
        print("The administrator's privileges:")
        for privilege in self.privileges:
            print('\t', privilege)

class Admin(User):
    # 接受父类实例所需信息
    def __init__(self, first_name, last_name, age, middle_name=''):
        # 父类的所有属性,不用赋值空字符串
        super().__init__(first_name, last_name, age, middle_name)
        self.privileges = Privileges()


# 测试
print("Example:")
# 1、给父类的属性赋值
ae = Admin('albert', 'einstein', 10)
ae.greet_user()
# 2、给父类的属性赋值,当有中间名时
jwc = Admin('john', 'croft', 5, 'william')
jwc.greet_user()
print("*"*50)

ae = Admin('albert', 'einstein', 10)
ae.privileges = Privileges(["can add post", "can delete post", "can ban user"])
ae.privileges.show_privileges()

Example:
Hellow Albert Einstein , Welcome to Python.
Hellow John William Croft , Welcome to Python.


The administrator’s privileges:
can add post
can delete post
can ban user

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值