用类的实例化提高效率
一、类简介
模拟一家餐厅,餐厅有名字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
导入类和导入函数基本一致,包括
-
from restaurantCLS import Restaurant
(或from restaurantCLS import Restaurant,others,or_something
)
不需要声明模块名 -
from restaurantCLS import Restaurant as RES
不需要声明模块名,且函数名在此程序中替换为 RES -
import restaurantCLS as RESCLS
需要声明模块名,但模块名在此程序中替换为RESCLS -
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()
时,函数正常运行,可能是子类中已经导入了父类,所以只导入子类文件时,父类文件也随子类一并导入
![](https://img.haomeiwen.com/i7147803/5f1055fcf0580906.png)
网友评论