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

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

你可能感兴趣的:(学习Python类与对象,亲手打造智能小助手)