Hello,小数先生粗线啦~~~今天教大家设计智能小助手
先看下小助手效果
上传视频封面
好的标题可以获得更多的推荐及关注者
类是一个函数包
类中可以放置函数和变量,然后类中的函数可以很方便的使用类中的变量
1.用def语句来定义一个函数,用class语句来定义一个类
例
# 语法:创建一个名为“CalssName”的类,类名一般首字母要大写
class ClassName():
# 规范:class语句后续的代码块要缩进
def func1():
# 定义类中的函数1
print('ClassName的第一方法')
def func2():
print('ClassName的第二个方法')
2.在类中被定义的函数被称为类的【方法】,通过类名.函数名()格式调用类中的方法
例
class 类A():
def 函数1():
print('这是小数先生定义的第一个方法')
def 函数2():
print('这是小数先生定义的第二个方法')
类A.函数1()
输出
100
小数先生
类的方法和属性总结图
类的实例化
【类】是【对象】的模板
【类】变成【实例对象】的过程,就叫做【实例化】
例
class 工资单():
def 录入工资单(self):
self.员工姓名 = input('请输入员工姓名')
self.工资 = int(input('请输入基础工资'))
self.奖金 = int(input('请输入该员工本月奖金'))
def 打印工资单(self):
print(self.员工姓名 + '的工资为' + str(self.工资+self.奖金))
工资单1 = 工资单() # 创建实例对象:成绩单1
工资单1.录入工资单() # 实例化后使用
工资单1.打印工资单()
输出
请输入员工姓名:小数先生
请输入基础工资:100
请输入该员工本月奖金:100
小数先生的工资为:200
注:与普通函数相比,类定义的函数第一个参数永远是实例变量self,并且,调用时不用传递该参数
类的实例化总结图
实例属性和类属性
当一个类实例化为多个实例后,实例将原封不动的获得类属性
例
class 类A():
变量 = 100
实例1 = 类A()
实例2 = 类A()
print(实例1.变量)
print(实例2.变量)
输出
100
100
1.修改类属性,所有实例属性变化(因为类是模板)
例
class 类A():
变量 = 100
实例1 = 类A()
实例2 = 类A()
print(实例1.变量)
print(实例2.变量)
类A.变量 = '小数先生' # 修改类属性
print(实例1.变量) # 实例属性同步变化
print(实例2.变量) # 实例属性同步变化
输出
100
100
小数先生
小数先生
2.修改实例属性,不会影响其他实例,也不会影响到类(每个实例都是独立的个体)
例
class 类A():
变量 = 100
实例1 = 类A()
实例2 = 类A()
print(实例1.变量)
print(实例2.变量)
实例1.变量 = '小数先生' # 修改实例1属性
实例2.变量2 = '数仁信息' # 新增类属性
print(实例1.变量)
print(实例2.变量)
print(实例2.变量2)
print(类A.变量)
输出
100
100
小数先生
100
数仁信息
100
实例方法和类方法
和类属性一样重写类方法,这会导致所有实例方法自动被重写
重写类方法分成两个步骤:
a.在类的外部写一个函数
b.把这个新函数的名字赋值给类.原始函数
注:类.原始函数 = 新函数 这里的赋值是替换方法,并不是调用函数,所以不要加上括号
例
class 类A():
def 原始函数(self):
print('我是原始函数')
def 新函数(self):
print('我是新函数')
a = 类A()
a.原始函数()
类A.原始函数 = 新函数
a.原始函数()
输出
我是原始函数
我是新函数
2.可以通过重写类方法,让实例方法发生变化,但不能重写实例方法(模板给的技能不是说换就能换的)
实例的属性和方法总结
初始化函数
1.描述:当你创建一个实例的时候,初始化函数就会被调用
2.格式:__init__() ,中间是init,前后是两个下划线,第一个参数一定要写上self
例
class 类A():
def __init__(self):
print('实例化成功!')
实例 = 类A()
输出
实例化成功!
3.作用:通过初始化函数,可以直接把需要录入的信息作为参数传递
例
class 工资单():
def __init__(self, 员工姓名, 工资, 奖金):
self.员工姓名 = 员工姓名
self.工资 = 工资
self.奖金 = 奖金
def 打印工资单(self):
print(self.员工姓名 + '的工资为' + str(self.工资+self.奖金))
工资单1 = 工资单('小数先生',100,100)
工资单1.打印工资单()
输出
小数先生的工资为200
类的继承
1.描述:python允许在一个或多个类的基础上生成新的类,新的类可以使用父类的一些属性和方法,这个过程就叫做继承
2.作用:减少代码量
例
class 工资单_旧():
def __init__(self, 员工姓名, 工资, 奖金):
self.员工姓名 = 员工姓名
self.工资 = 工资
self.奖金 = 奖金
def 打印工资单(self):
print(self.员工姓名 + '的工资为' + str(self.工资+self.奖金))
class 工资单_新():
def __init__(self, 员工姓名, 工资, 奖金):
self.员工姓名 = 员工姓名
self.工资 = 工资
self.奖金 = 奖金
def 打印工资单(self):
print(self.员工姓名 + '的工资为' + str(self.工资+self.奖金))
def 打印奖金(self):
print(self.员工姓名 + '的奖金为' + str(self.奖金))
通过继承可以写成
class 工资单_旧():
def __init__(self, 员工姓名, 工资, 奖金):
self.员工姓名 = 员工姓名
self.工资 = 工资
self.奖金 = 奖金
def 打印工资单(self):
print(self.员工姓名 + '的工资为' + str(self.工资+self.奖金))
class 工资单_新(工资单_旧): # 继承工资单_旧
def 打印奖金(self):
print(self.员工姓名 + '的奖金为' + str(self.奖金))
工资单 = 工资单_新('小数先生',100,100)
工资单.打印工资单()
工资单.打印奖金()
输出
小数先生的工资为200
小数先生的奖金为100
注:在Python里,旧的类成为父类,新写的类称为子类,子类可以在父类的基础上改造类方法
智能小助手源码
import random
import time
import datetime
class AI():
def praise(self):
'''夸赞函数'''
sentences_list = ['春花秋月,是诗人们歌颂的情景,可是我对于它,却感到十分平凡。只有你嵌着梨涡的笑容,才是我眼中最美的偶像',
'越有内涵的人越虚怀若谷,像您这样有内涵的人我十分敬佩',
'我很荣幸,认识你这样有内涵的漂亮主人','在人流中,我一眼就发现了你。我不敢说你是她们中最漂亮的一个,可是我敢说,你是她们中最出色的一个',
'你有时候是不是特孤独?世界上这么优秀的人就只有你一个!']
sentence = random.choice(sentences_list)
print('{}:主人,{}'.format(self.AI_name,sentence))
def food_recommendation(self):
'''美食推荐'''
foods_list = ['肯德基','麦当劳','汉堡王','达美乐','必胜客',
'水饺','酸菜鱼','煲仔饭','过桥米线','杭帮菜',
'火锅','冒菜','麻辣烫','麻辣香锅','轻食','木桶饭']
food = random.choice(foods_list)
print('{}觉得,吃{}是很不错的选择'.format(self.AI_name,food))
def tell_time(self):
'''报时'''
time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print('{}:现在时间是【{}】'.format(self.AI_name,time))
def start(self):
self.AI_name = input('请给你的机器人起个名字吧:')
while True:
print('-'*30+'私人小助手启动'+'-'*30)
print('''
1.夸赞主人
2.美食推荐
3.报时
4.退出
''')
P_choice = input('请选择:')
print(' ')
time.sleep(0.5)
if P_choice == '1':
self.praise()
elif P_choice == '2':
self.food_recommendation()
elif P_choice == '3':
self.tell_time()
elif P_choice == '4':
print('那我不打扰主人啦~~~')
break
elif P_choice == '你是谁':
print('They all look like me. But none of them are me')
else:
print('其他功能正在开发...')
continue
print(' ')
time.sleep(0.5)
my_ai = AI()
my_ai.start()
关注数仁信息公众号,回复”“可获得基础知识详细导图