《python编程:从入门到实践的》第九章:类的例题代码

例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()

《python编程:从入门到实践的》第十章:文件和异常的例题代码

猜你喜欢

转载自blog.csdn.net/qq_41917061/article/details/108845738