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()的方法
- 它显示管理员权限
- 添加一个名为 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