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