学习Python类与对象,亲手打造智能小助手

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

关注数仁信息公众号,回复”简书“可获得基础知识详细导图

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353

推荐阅读更多精彩内容