本文代码是在jupyter中实现的,仅为了自我督促学习python之用。
9-6 冰淇淋小店:冰淇淋小店是一种特殊的餐馆。编写一个名为 IceCreamStand 的类,让它继承你为完成练习 9-1 或练习 9-4 而编写的 Restaurant 类。这两个版本的Restaurant 类都可以,挑选你更喜欢的那个即可。添加一个名为 flavors 的属性,用于存储一个由各种口味的冰淇淋组成的列表。编写一个显示这些冰淇淋的方法。创建一个IceCreamStand 实例,并调用这个方法。
代码:
class Restaurant():
"""创建一个包含餐厅名称和所售菜系的类"""
def __init__(self, restaurant_name, cuisine_type):
"""初始化属性restaurant_name和cuisine_type"""
self.restaurant_name = restaurant_name
self.cuisine_type = cuisine_type
def describe_restaurant(self):
"""打印餐厅名称和菜品类型"""
print("This wonderful restaurant is called " + self.restaurant_name.title() + "." )
print("The restaurant focuses on " + self.cuisine_type.title() + " cuisine.")
def open_restaurant(self):
"""打印‘该餐馆正在营业中......’"""
print("The restaurant is open now ......")
class IceCreamStand(Restaurant):
def __init__(self, restaurant_name, cuisine_type):
"""初始化父类Restaurant的属性"""
super().__init__(restaurant_name, cuisine_type)
self.flavors = ['Chocolate', 'vanilla', 'cream', 'matcha', 'strawberry']
def Icecream_flavors(self):
"""将列表中所包含的信息逐次打印出来"""
for Icecream_flavor in self.flavors:
print("This store also sells ice cream, the flavors include: " + Icecream_flavor)
IceCreamStand = IceCreamStand('width alley', 'sichuan')
IceCreamStand.describe_restaurant()
IceCreamStand.open_restaurant()
IceCreamStand.Icecream_flavors()
运行结果:
This wonderful restaurant is called Width Alley.
The restaurant focuses on Sichuan cuisine.
The restaurant is open now ......
This store also sells ice cream, the flavors include: Chocolate
This store also sells ice cream, the flavors include: vanilla
This store also sells ice cream, the flavors include: cream
This store also sells ice cream, the flavors include: matcha
This store also sells ice cream, the flavors include: strawberry
9-7 管理员:管理员是一种特殊的用户。编写一个名为 Admin 的类,让它继承你为完成练习 9-3 或练习 9-5 而编写的 User 类。添加一个名为 privileges 的属性,用于存储一个由字符串(如 “can add post” 、 “can delete post” 、 “can ban user” 等)组成的列表。编写一个名为 show_privileges() 的方法,它显示管理员的权限。创建一个 Admin实例,并调用这个方法。
代码:
class User():
"""创建一个包含用户简介的类"""
def __init__(self, first_name, last_name, age, gender):
"""初始化属性first_name和last_name,age, gender"""
self.first_name = first_name
self.last_name = last_name
self.age = age
self.gender = gender
def describe_user(self):
"""打印用户信息摘要"""
print(self.first_name.title() + " , " + self.last_name.title() + " , " + str(self.age) + " , " + self.gender.title()) # 打印Restaurant类中创建的两个属性
def greet_user(self):
"""向用户表示问候"""
print(self.first_name.title() + " " + self.last_name.title() + ", nice to meet you.")
class Admin(User):
def __init__(self, first_name, last_name, age, gender):
"""初始化父类的属性"""
super().__init__(first_name, last_name, age, gender)
self.privileges = ['can add post', 'can delete post', 'can ban user']
def show_privileges(self):
"""用于显示管理员权限"""
print("You "+ self.privileges[1] + '.')
user = Admin('Taylor', 'Swift',31,'female')
user.describe_user()
user.greet_user()
user.show_privileges()
运行结果:
Taylor , Swift , 31 , Female
Taylor Swift, nice to meet you.
You can delete post.
9-8 权限:编写一个名为 Privileges 的类,它只有一个属性——privileges ,其中存储了练习 9-7所说的字符串列表。将方法 show_privileges() 移到这个类中。在 Admin类中,将一个 Privileges 实例用作其属性。创建一个 Admin 实例,并使用方法show_privileges() 来显示其权限。
代码:
class User():
"""创建一个包含用户简介的类"""
def __init__(self, first_name, last_name, age, gender):
"""初始化属性first_name和last_name,age, gender"""
self.first_name = first_name
self.last_name = last_name
self.age = age
self.gender = gender
def describe_user(self):
"""打印用户信息摘要"""
print(self.first_name.title() + " , " + self.last_name.title() + " , " + str(self.age) + " , " + self.gender.title()) # 打印Restaurant类中创建的两个属性
def greet_user(self):
"""向用户表示问候"""
print(self.first_name.title() + " " + self.last_name.title() + ", nice to meet you.")
class Privileges():
def __init__(self):
self.privileges_list = ['can add post', 'can delete post', 'can ban user']
def show_privileges(self):
"""用于显示管理员权限"""
print("You "+ self.privileges_list[1] + '.')
class Admin(User):
def __init__(self, first_name, last_name, age, gender):
"""初始化父类的属性"""
super().__init__(first_name, last_name, age, gender)
self.privileges = Privileges()
user = Admin('Taylor', 'Swift',31,'female')
user.describe_user()
user.greet_user()
user.privileges.show_privileges()
运行结果:
Taylor , Swift , 31 , Female
Taylor Swift, nice to meet you.
You can delete post.
疑问:
我一开始把
def __init__(self):
写成了下面的形式,结果报错了,如下所示。目前,还不知道为什么,如果有大佬路过看到,知道原因,可以在评论区留言告知一下下,多谢。
代码:
def __init__(self, privileges_list):
报错:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-32-1d19d9466c31> in <module>
31
32
---> 33 user = Admin('Taylor', 'Swift',31,'female')
34 user.describe_user()
35 user.greet_user()
<ipython-input-32-1d19d9466c31> in __init__(self, first_name, last_name, age, gender)
28 """初始化父类的属性"""
29 super().__init__(first_name, last_name, age, gender)
---> 30 self.privileges = Privileges()
31
32
TypeError: __init__() missing 1 required positional argument: 'privileges_list'
9-9 电瓶升级:在本节最后一个 electric_car.py 版本中,给 Battery 类添加一个名为upgrade_battery() 的方法。这个方法检查电瓶容量,如果它不是 85,就将它设置为 85。创建一辆电瓶容量为默认值的电动汽车,调用方法 get_range() ,然后对电瓶进行升级,并再次调用 get_range() 。你会看到这辆汽车的续航里程增加了。
代码:
class Car():
"""一次模拟汽车的简单尝试"""
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
def get_descriptive_name(self):
long_name = str(self.year) + ' ' + self.make + self.model
return long_name.title()
def read_odometer(self):
print("This car has " + str(self.odometer_reading) + " miles on it.")
def update_odometer(self, mileage):
if mileage >= self.odometer_reading:
self.odometer_reading = mileage
else:
print("You can't roll back an odometer!")
def increment_odometer(self, miles):
self.odometer_reading += miles
class Battery():
"""一次模拟电动汽车电瓶的简单尝试"""
def __init__(self, battery_size=70):
"""初始化电瓶的属性"""
self.battery_size = battery_size
def describe_battery(self):
"""打印一条描述电瓶容量的消息"""
print("This car has a " + str(self.battery_size) + " -kWh battery")
def get_range(self):
"""打印一条消息,指出电瓶的续航里程"""
if self.battery_size ==70:
range = 240
elif self.battery_size ==85:
range = 270
message = "This car can go approximately " + str(range)
message += " miles on a full charge."
print(message)
def upgrade_battery(self):
"""检查电瓶容量,如果容量不是85,将其调整为85"""
if self.battery_size != 85:
self.battery_size = 85
print("The battery capacity of the upgraded electric car is: " + str(self.battery_size))
class ElectricCar(Car):
"""电动车的独特之处"""
def __init__(self, make, model, year):
"""初始化父类的属性"""
super().__init__(make, model, year)
self.battery = Battery()
my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()
my_tesla.battery.get_range()
my_tesla.battery.upgrade_battery()
my_tesla.battery.get_range()
运行结果:
2016 Teslamodel S
This car has a 70 -kWh battery
This car can go approximately 240 miles on a full charge.
The battery capacity of the upgraded electric car is: 85
This car can go approximately 270 miles on a full charge.