2018-03-05

作者: 果轰桃 | 来源:发表于2018-03-05 21:05 被阅读0次

    用类的实例化提高效率

    一、类简介

    模拟一家餐厅,餐厅有名字restaurant_name菜的类型cuisine_type

    class Restaurant():
        '''模拟一家餐馆'''
        def __init__(self,restaurant_name,cuisine_type):
            '''初始化name,type'''
            self.name = restaurant_name
            self.type = cuisine_type
    
        def describe_restaurant(self):
            '''打印餐厅基本信息'''
            print(self.name.title() +  ' sells ' + self.type.title() + ' dishes')
    
        def open_restaurant(self):
            '''描述餐厅状态'''
            print('OPENING, WELCOME!')
    
        def number_served(self):
            '''打印来过餐厅的人数'''
            print(str(self.served) + ' people have been ' + self.name.title())
    

    文件存储为restaurantCLS.py
    现在要增加一个餐厅光顾总数的属性,添加self.served = 0
    def __init__(self,restaurant_name,cuisine_type):
    此时,我们要增加餐厅光顾过的总数,而且餐厅中来过人数是不能减少的,于是有:

    class Restaurant():
        '''模拟一家餐馆'''
        def __init__(self,restaurant_name,cuisine_type):
            '''初始化name,type'''
            self.name = restaurant_name
            self.type = cuisine_type
            self.served = 0
            #增加了self.served属性·····································<<<<<<<<<<<<<<<<<<<<<<<<<<
    
        def describe_restaurant(self):
            '''打印餐厅基本信息'''
            print(self.name.title() +  ' sells ' + self.type.title() + ' dishes')
    
        def open_restaurant(self):
            '''描述餐厅状态'''
            print('OPENING, WELCOME!')
    

    增加:

        def number_served(self):
            '''打印来过餐厅的人数'''
            print(str(self.served) + ' people have been ' + self.name.title())
    
        def set_number_served(self,number):
            '''设置就餐过的人数'''
            if number >= self.served :
                self.served = number
            else:
                print('Please check yor number')
    
        def increase_number_served(self,number):
            '''增加就餐人数'''
            if number>= 0:
                self.served += number
            else:
                print('you can\'t decrease this number')
    
    
    小结
    • 创建每个类,必须经过初始化,即__init__必须存在self,后面的形参根据所需实参调整。
    • 可以在初始化中增加另外的属性self.served = 0,且可以在类中通过函数对其做出调整,如def set_number_served(self,number):
      其中主函数调用set_number_served传参,通过number,进行修改self.served = 0
    • 类中的函数是很重要的功能,实例化后可对其进行调用

    二、继承和导入类

    import restaurantCLS
    
    class IceCreamStand(restaurantCLS.Restaurant):
        '''创建Restaurant子类'''
        def __init__(self,restaurant_name,cuisine_type):
            super().__init__(restaurant_name,cuisine_type)
            #super()声明参数············································<<<<<<<<<<<<<<<<<<<<
            self.tastes = ['strawberry','coconut','vanilla']
    
        def output_taste(self):
            '''展示冰淇淋店的口味'''
            print('WE HAVB :')
            for taste in self.tastes:
                print(taste)
    

    存储为IceCreamStandCLS
    导入类和导入函数基本一致,包括

    1. from restaurantCLS import Restaurant(或from restaurantCLS import Restaurant,others,or_something)
       不需要声明模块名
    2. from restaurantCLS import Restaurant as RES
       不需要声明模块名,且函数名在此程序中替换为 RES
    3. import restaurantCLS as RESCLS
       需要声明模块名,但模块名在此程序中替换为RESCLS
    4. from restaurantCLS import *
       引入此模块中所有的函数 (2、3、4并不推荐使用,只为能看懂别人的代码)
    小结
    • 继承的父类应写在子类class名后的括号中
    • 需要继承父类中的所有属性,并在super()中声明,(和父类保持一致的形参父类中__init__()中添加的属性,如self.served = 0)
    • 导入类后,即可实用化类或继承等操作。

    三、主函数中类的导入

    from IceCreamStandCLS import IceCreamStand
    
    my_restaurant = IceCreamStand('Ice Castle','cool')
    my_restaurant.set_number_served(44)
    my_restaurant.describe_restaurant()
    my_restaurant.number_served()
    

    当只导入子类IceCreamStand(),未导入Restaurant()时,函数正常运行,可能是子类中已经导入了父类,所以只导入子类文件时,父类文件也随子类一并导入

    image.png

    相关文章

      网友评论

        本文标题:2018-03-05

        本文链接:https://www.haomeiwen.com/subject/itlkfftx.html