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

class Admin(User):
    def __init__(self, first_name, last_name, age, address):
        """初始化父类的属性,再初始化管理员特有的属性"""
        super().__init__(first_name, last_name, age, address)
        self.privileges = ['can add poet', 'can delete post', 'can ban user']

    def show_privileges(self):
        """显示管理员的权限"""
        print("\nThis is admin's privileges:")
        for privilege in self.privileges:
            print(privilege.title())


admin = Admin("beef", "mark", '34', 'yunnan')
admin.greet_user()
admin.show_privileges()

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

class Privileges:
    def __init__(self):
        """初始化属性"""
        self.privileges = ['can add poet', 'can delete post', 'can ban user']

    def show_privileges(self):
        """显示管理员的权限"""
        print("This is admin's privileges:")
        for privilege in self.privileges:
            print(privilege.title())


class Admin(User):
    def __init__(self, first_name, last_name, age, address):
        """初始化父类的属性,再初始化管理员特有的属性"""
        super().__init__(first_name, last_name, age, address)
        self.privileges = Privileges()  # 实例用作属性


admin = Admin("beef", "mark", '34', 'yunnan')
admin.greet_user()
admin.privileges.show_privileges()

9-9 电瓶升级: 在electric_car.py版本中,给Battery类添加一个名为upgrade_battery()的方法。这个方法检查电瓶容量,如果它不是85,就将它设置为85。创建一辆电瓶容量为默认值的电动汽车,调用方法get_range(),然后对电瓶进行升级,并再次调用方法get_range(),查看汽车续航里程增加了。

class Car:
...


class Battery:
...

    def upgrade_battery(self):
        """更新里程"""
        if self.battery_size != 85:
            self.battery_size = 85


class ElectricCar(Car):
    """电动汽车的独特之处"""

    def __init__(self, make, model, year):
        """初始化父类的属性"""
        super().__init__(make, model, year)
        self.battery = Battery()


my_tesla = ElectricCar('tesla', 'model s', 2019)
print(my_tesla.get_descriptive_name())
my_tesla.battery.get_range()
my_tesla.battery.upgrade_battery()
my_tesla.battery.get_range()

9-10 导入Restaurant类: 将最新的Restaurant类存储在一个模块中。在另一个文件,导入Restaurant类,创建一个Restaurant实例,并调用Restaurant的一个方法,以确认import语句正确无误。

restaurant.py

class Restaurant:
    def __init__(self, restaurant_name, cuisine_type):
        """初始化属性"""
        self.restaurant_name = restaurant_name
        self.cuisine_type = cuisine_type

    def describe_restaurant(self):
        """打印餐馆的名字和类型"""
        print("Restaurant Name: " + self.restaurant_name.title())
        print("Cuisine: " + self.cuisine_type.title())

 

from restaurant import Restaurant
restaurant = Restaurant("Love", 'icecream')
restaurant.describe_restaurant()

9-11 导入Admin类: 以9-8为基础,将User、Privileges和Admin类存储在一个模块中。再创建一个文件,在其中创建一个Admin实例并对其调用方法show_privileges(),以确认一切依然能够正确运行。

all_user.py

class User:
...


class Privileges:
...


class Admin(User):
...
import all_user
admin = all_user.Admin('shirley', 'yang', '18', 'xian')
admin.privileges.show_privileges()

9-12 多个模块: 将User类存储在一个模块中,并将Privileges和Admin类存储在另一个模块中。再创建一个文件,在其中创建一个Admin实例并对其调用方法show_privileges(),以确认一切依然能够正确运行。

user.py

class User:
...
admin.py

from user import User


class Privileges:
...


class Admin(User):
...
import admin
admin = admin.Admin('shirley', 'yang', '18', 'xian')
admin.privileges.show_privileges()