例1:
#餐馆 :创建一个名为 Restaurant 的类,其方法 __init__() 设置两个属性: restaurant_name 和 cuisine_type 。
# 创建一个名为 describe_restaurant() 的方法和一个名为 open_restaurant() 的方法,其中前者打印前述两项信息,而后者打印一条消息,指出餐馆正在营业
#根据这个类创建一个名为 restaurant 的实例,分别打印其两个属性,再调用前述两个方法
class Restaurant():
def __init__(self,restaurant_name,cuisine_type):
#初始化属性restaurant_name和cuisine_type,这2个是属性
self.restaurant_name = restaurant_name
self.cuisine_type = cuisine_type
def describe_restaurant(self):
print(self.restaurant_name.title())
print(self.cuisine_type)
def open_restaurant(self):
print(self.restaurant_name.title()+'正在营业')
restaurant = Restaurant('abc','哈哈')
#访问属性:restaurant.restaurant_name()
print('输出属性:'+restaurant.restaurant_name)
print('-----------------')
#调用方法
restaurant.describe_restaurant()
restaurant.open_restaurant()
print('-----------------')
#创建多个实例
res = Restaurant('12','0')
restaurant.describe_restaurant()
例2:
'''
就餐人数 :在为完成练习 9-1 而编写的程序中,添加一个名为 number_served 的属性,并将其默认值设置为 0 。
根据这个类创建一个名为 restaurant 的实例;打印有多少人在这家餐馆就餐过,然后修改这个值并再次打印它
添加一个名为 set_number_served() 的方法,它让你能够设置就餐人数。调用这个方法并向它传递一个值,然后再次打印这个值。
添加一个名为 increment_number_served() 的方法,它让你能够将就餐人数递增。调用这个方法并向它传递一个这样的值:你认为这家餐馆每天可能接待的就
餐人数
'''
class Restaurant():
def __init__(self,restaurant_name,cuisine_type):
#初始化属性restaurant_name和cuisine_type,这2个是属性
self.restaurant_name = restaurant_name
self.cuisine_type = cuisine_type
#给属性指定默认值,则无需为它提供初始值的形参
self.number_served = 0
def number(self):
print('人数有:'+str(self.number_served))
def set_number_served(self,num):
self.number_served = num
def increment_number_served(self,a):
if a >= 0:
self.number_served = self.number_served+a
else:
print('人数只能递增,不能减少')
res1 = Restaurant('A','1')
res1.number_served = 12
res1.number()
res3 = Restaurant('111','aa')
res3.set_number_served(22)
res3.number()
res2 = Restaurant('B','2')
res2.number_served = 100
res2.increment_number_served(10)
res2.number()
例3:
'''
创建一个名为 User 的类,其中包含属性 first_name 和 last_name ,还有用户简介通常会存储的其他几个属性。
在类 User 中定义一个名为 describe_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
'''
class User():
def __init__(self,first_name,last_name,):
self.first_name = first_name
self.last_name = last_name
self.login_attempts = 0
def increment_login_attempts(self):
self.login_attempts += 1
def reset_login_attempts(self):
self.login_attempts = 0
u1 = User('aa','b')
while True:
if u1.login_attempts == 5:
break
else:
u1.increment_login_attempts()
print('增加5次后:'+str(u1.login_attempts))
u1.reset_login_attempts()
print('重置为0后:'+str(u1.login_attempts))
例4:
'''
冰淇淋小店 :冰淇淋小店是一种特殊的餐馆。编写一个名为 IceCreamStand 的类,让它继承你为完成练习 9-1 或练习 9-4 而编写的 Restaurant 类。这两个版
本的 Restaurant 类都可以,挑选你更喜欢的那个即可。添加一个名为 flavors 的属性,用于存储一个由各种口味的冰淇淋组成的列表。编写一个显示这些冰淇淋
的方法。创建一个 IceCreamStand 实例,并调用这个方法。
'''
class Restaurant():
def __init__(self,restaurant_name,cuisine_type):
#初始化属性restaurant_name和cuisine_type,这2个是属性
self.restaurant_name = restaurant_name
self.cuisine_type = cuisine_type
class IceCreamStand(Restaurant):
def __init__(self,restaurant_name,cuisine_type):
#注意,继承这里不需要添加self
super().__init__(restaurant_name,cuisine_type)
self.flavors = []
def kouwei(self):
print(self.flavors)
ice = IceCreamStand('A','a')
ice.flavors = ['1','2']
ice.kouwei()
例5:
'''
管理员 :管理员是一种特殊的用户。编写一个名为 Admin 的类,让它继承你为完成练习 9-3 或练习 9-5 而编写的 User 类。
编写一个名为 Privileges 的类,它只有一个属性 —— privileges
privileges 的属性,用于存储一个由字符串(如 "can add post" 、 "can delete post" 、 "can ban user" 等)组成的列表。
编写一个名为 show_privileges() 的方法,它显示管理员的权限。创建一个 Admin 实例,并调用这个方法
'''
#父类
class User():
def __init__(self,first_name,last_name):
self.first_name = first_name
self.last_name = last_name
self.login_attempts = 0
def name(self):
print(self.first_name+self.last_name)
#可以调用这个类来输出权限列表
class Privileges():
def __init__(self):
self.privileges = ["can add post" , "can delete post" , "can ban user"]
def show_privileges(self):
for s in self.privileges:
print(s)
#子类,继承类User()
class Admin(User):
def __init__(self,first_name,last_name):
super().__init__(first_name,last_name)
#将类Privileges()的实例用作类Admin()的属性
self.privileges = Privileges()
use = Admin('管','里')
use.name()
use.privileges.show_privileges()
例6:
'''
模块 random 包含以各种方式生成随机数的函数,其中的 randint() 返回一个位于指定范围内的整数,例如,下面的代码返回一个 1~6 内的整数:
from random import randint
x = randint(1, 6)
请创建一个 Die 类,它包含一个名为 sides 的属性,该属性的默认值为 6 。编写一个名为 roll_die() 的方法,它打印位于 1 和骰子面数之间的随机数。
创建一个 6 面的骰子,再掷 10 次。 创建一个 10 面的骰子和一个 20 面的骰子,并将它们都掷 10 次。
'''
#注:字典让你能够将信息关联起来,但它们不记录你添加键 — 值对的顺序。要创建字典并记录其中的键 — 值对的添加顺序,可使用模块 collections 中的
# OrderedDict类。 OrderedDict 实例的行为几乎与字典相同,区别只在于记录了键 — 值对的添加顺序
from random import randint
class Die():
def __init__(self,sides=6):
self.sides = sides
#输出随机数
def roll_die(self):
x = randint(1, self.sides)
print(x)
die = Die()
#投掷骰子
for a in range(3):
die.roll_die()