首页 > 其他分享 >Day20笔记-面向对象&类和对象&类中的属性和函数&构造和析构函数

Day20笔记-面向对象&类和对象&类中的属性和函数&构造和析构函数

时间:2024-09-16 19:51:17浏览次数:16  
标签:__ 函数 对象 self Day20 print 和析构 def name

一、面向对象基础

1.概念
1.1面向对象的设计思想

面向对象是基于万物皆对象这个哲学观点,在Python中,一切皆对象

举例说明:

​ 案例一:我想要吃大盘鸡

​ 面向过程 面向对象

​ 1.自己去买菜 1.委托一个会砍价的人帮忙去买菜

​ 2.自己择菜 2.委托一个临时工帮忙择菜

​ 3.自己做菜 3.委托一个厨师帮忙做菜

​ 4.自己开始吃 4.自己开始吃

​ 案例二:小明是一个电脑小白,想要配一台电脑,买完零件后需要运到家里,组装完成后打开电脑玩游戏

​ 面向过程 面向对象

​ 1.小明补充电脑知识 1.委托一个懂电脑的朋友(老王)去帮忙买零件

​ 2.小明去买零件 2.委托一个能跑腿的人将零件运送到家里

​ 3.小明把零件带回家里 3.委托一个会组装电脑的人帮小明组装电脑

​ 4.小明组装电脑 4.小明自己打开电脑,开始玩游戏

​ 5.小明开机玩电脑

1.2面向过程和面向对象的区别【面试题】

面向过程

在生活案例中:

​ 一种看待问题的思维方式,在思考问题的时候,着眼于问题是怎样一步一步解决的,然后亲力亲为的去解决问题

在程序中:

​ 1》代码从上而下顺序执行

​ 2》每一模块内部均是由顺序、选择和循环三种基本结构组成

​ 3》程序流程在写程序时就已决定

面向对象

在生活案例中:

​ 也是一种看待问题的思维方式,着眼于找到【一个具有特殊功能的具体个体,然后委托这个个体去做某件事情】,我们把这个个体就叫做对象,一切皆对象

​ 是一种更符合人类思考习惯的思想【懒人思想】,可以将复杂的事情简单化,将程序员从执行者角度转换成了指挥者角度

在程序中:

​ 把数据及对数据的操作方法放在一起,作为一个相互依存的整体——对象

​ 1》对同类对象抽象出其共性,形成类

​ 2》类中的大多数数据,只能用本类的方法进行处理

​ 3》程序流程由用户在使用中决定

​ 4》使用面向对象进行开发,先要去找具有所需功能的对象,如果该对象不存在,那么创建一个具有该功能的对象

注意:面向对象只是一种思想,不是一门编程语言,也不会绑定编程语言

面向过程和面向对象的优缺点【面试题】

面向过程:

​ 优点:性能较高,比如单片机,嵌入式开发等一般采用的是面向过程的方式,因为性能是最重要的因素

​ 缺点:没有面向对象易于维护,易于复用,易于扩展,开销比较大,比较消耗资源

面向对象:

​ 优点:易于维护,易于复用,易于扩展,因为面向对象有封装、继承和多态的特征,可以涉及出低耦合的系统,使得系统更加灵活

​ 缺点:性能较低

使用面向对象解决问题,其中的核心内容:类和对象

2.类和对象【重点掌握】
2.1概念

类:一个具有特殊功能的实体的集合【群体】,是抽象的概念

对象:在一个类中,一个具有特殊功能的实体,能够帮忙解决特定的问题【对象也被称为实例】,是具体的存在

两者之间的关系:类用于描述某一类对象的共同特征,而对象则是类的具体存在

问题:先有对象还是先有类?

先有对象,再有类-----》将多个具有共同特征的对象,抽取一个类出来

先有类,再有对象----》在代码中,一般都是先定义类,通过类创建对象,

举例:

​ 类 对象

​ 人 张三、李四、王麻子、杨阳。。。

​ SuperHero 蝙蝠侠、蜘蛛侠、美国队长。。。

​ 快递 顺丰、圆通、申通、韵达。。。

帮助理解:类也是一种数据类型,只不过是自定义的,用于描述生活中的一些事物,且Python中并没有提供这些类型,跟学过的intAct,float,str。。。。类似,用类创建对象则相当于定义一个类的变量

2.2类的定义

格式:

class  类名():
    类体
    
# ()可以省略

说明:

​ a.Python中使用class关键字定义类

​ b.类名只要是一个合法的标识符即可,但是要求:遵循大驼峰命名法【每个单词的首字母大写】 ,如:KeyError,ValueError,NameError,IndexError…….

​ c.尽量使用单个或多个有意义的单词连接而成,类名中一般不使用下划线

​ d.通过缩进来体现类体的存在

​ e.类体一般包含两部分内容:对类的特征描述和行为描述

​ f.类的包含两部分:类的声明和类的实现

# 1.类是一种数据类型
# a
num = 10  # 定义一个变量
print(type(num))  # <class 'int'>
​
# b.
v = ValueError() # 创建一个对象
print(type(v))   # <class 'ValueError'>
​
# 2.类的定义
# a.函数的定义
# def func():
#     print('ok~~~~~func')
​
# b.类的定义
class Check():
    # 一般不会在类中print
    print('ok~~~~class')
class MyClass1():
    pass
class MyClass2:
    pass
​
# 通过类创建对象,语法:变量 = 类名()
m1 = MyClass1()
print(m1)
m2 = MyClass2()
print(m2,id(m2))
m22 = MyClass2()
print(m22,id(m22))
​
'''
总结:
    a.类和函数相比,函数必须调用才能执行其中的代码,但是类只要定义完毕,其中的内容就会被加载一遍
    b.在同一个py文件中,可以定义多个类,但是,如果要实现的需求较为复杂,一般会结合模块使用,在一个模块中定义一个类
    c.定义类的过程中,类名后面的()可以省略
    d.创建对象:变量 = 类名(),此处的()不能省略
    e.同一个类,默认情况下,可以创建无数个对象,每个对象都会被分配不同的地址
    f.直接输出对象,默认的情况下,会得到一个地址
'''
2.3对象的创建
# 通过类创建对象,语法:变量 = 类名()
m1 = MyClass1()
print(m1)
m2 = MyClass2()
print(m2,id(m2))
m22 = MyClass2()
print(m22,id(m22))
2.4类的设计

只需要关心3个要素

​ 事物名称(类名):人类(Person)

​ 特征:身高(height)、年龄(age)—————》名词———》变量

​ 行为:跑(run)、打架(fight)———————》动词————》函数

​ 初期学习,通过提炼动名词进行类的提取

# 类的定义
class Person():
    # 行为描述:函数
    '''
    关于self
        a.self不是关键字,本质上可以是一个任意的标识符,但是使用self表示自己【self在Java中是关键字】
        b.类中的函数,默认的情况下,形参列表的第一个参数都是self
        c.self表示当前对象,哪个对象调用该函数,则self表示哪个对象
        d.当调用函数的时候,self无需手动传参,会自动将当前对象传参给self,只需要注意自己定义的参数的传参即可
    '''
    def eat(self,food):
        print(f'eating {food}',f'self:{id(self)}')
    def run(self):
        print('running')
    def show(self):
        print(f'姓名:{self.name},年龄:{self.age}')  # 哪个对象调用show函数,则输出的就是该对象对应的属性
​
# 创建对象
p1 = Person()
print(p1)
​
p2 = Person()
print(p2)
​
# 特征描述:变量,语法:对象.属性  = 值
# 对一个对象进行某个特征的描述,可以借助于变量表示,此时的变量也可以被称为属性
p1.name = '张三'
p1.age = 20
# print(p1.name,p1.age)
​
p2.name = '李四'
p2.age = 18
p2.height = 180
# print(p2.name,p2.age,p2.height)
​
# 对象能且只能执行当前类中的行为【对象调用当前类中的函数】,语法:对象.函数(实参)
print('p1:',id(p1))
p1.eat('apple')
# p1.run()
p1.show()
​
print('p2:',id(p2))
p2.eat('banana')
# p2.run()
p2.show()
2.5案例一
'''
需求:开学了,王老师让小明,小花,小丽做自我介绍
    介绍内容包括:姓名,年龄,爱好
    展示一段才艺
'''
​
'''
分析:
    a.定义教师类和学生类
    b.教师类
        特征:姓名
        行为:让 学生 做自我介绍
    c.学生类
        特征:姓名,年龄,爱好
        行为:做 自我介绍
             才艺展示
'''
# 第一步:定义类
class Teacher():
    # self表示老师对象,stu是一个学生对象,只要一个变量表示的是某个对象,则该变量作为对象使用,可以访问对象的属性或类中的函数
    def let_stu_introduce(self,stu):
        print(stu)
        print(f'{self.name}让{stu.name}做自我介绍')
        # 学生开始执行自己的行为:做自我介绍和才艺战术
        stu.introduce()
        stu.show_talent()
​
class Student():
    def introduce(self):
        print(f'大家好,我是{self.name},今年{self.age},爱好{self.hobby}')
    def show_talent(self):
        if self.name == '小明':
            print(f'接下来给大家展示一段{self.hobby},我家里有几百头牛,几百头

标签:__,函数,对象,self,Day20,print,和析构,def,name
From: https://blog.csdn.net/m0_61388098/article/details/142306203

相关文章

  • 函数栈帧的创建与销毁(简单易懂超详细~)
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、什么是函数栈帧1.函数栈帧的创建与销毁2.寄存器3.函数调用创建函数栈帧二、main函数栈帧的创建与销毁1.main函数栈帧的开辟2.main函数中变量的创建3.main函数中Add的调用4.进入Add中去5.......
  • C语言main(主)函数介绍
    HelloWorldC语言main(主)函数介绍先展示一个标准的main程序#include<stdio.h>intmain(intargv,char*argc[]){return0;}这个程序是很多初学者学习C语言第一个程序,如果你现在将这个程序复制粘贴到文本编辑器并编译执行会发现,什么都没有!分编译器或IDE不同有的执行后会......
  • 高等数学 2.4 隐函数及由参数方程确定的函数的导数
    目录一、隐函数求导二、由参数方程所确定的函数的导数三、相关变化率一、隐函数求导函数\(y=f(x)\)表示两个变量\(y\)与\(x\)之间的对应关系,这种对应关系可以用各种不同方式表达,例如\(y=\sinx\),\(y=\lnx+\sqrt{1-x^2}\)等。这种函数表达方式的特点是:等号左......
  • (CS231n课程笔记)深度学习之损失函数详解(SVM loss,Softmax,熵,交叉熵,KL散度)
    学完了线性分类,我们要开始对预测结果进行评估,进而优化权重w,提高预测精度,这就要用到损失函数。损失函数(LossFunction)是机器学习模型中的一个关键概念,用于衡量模型的预测结果与真实标签之间的差距。损失函数的目标是通过提供一个差距的度量,帮助模型进行优化,最终减少预测误差。......
  • 用chatgpt让自己练习C++匿名函数
    再也不用去搜罗题目了,chatgpt1分钟搞定!如何使用ChatGPT帮助自己学习1、写prompt帮我写一个prompt,让LLM出一个c++专项训练的题目和题解,比如用户想学习C++的匿名函数,LLM就生成一个小型题目,题解全部是用C++匿名函数实现的。chatgpt:当然可以!以下是一个为训练C++匿名函......
  • MySQL篇(高级字符串函数/正则表达式)(持续更新迭代)
    目录讲点一:高级字符串函数一、简介二、常见字符串函数1.CONCAT()2.SUBSTRING()3.LENGTH()4.REPLACE()5.TRIM()6.UPPER()7.LOWER()8.LEFT()9.RIGHT()10.INSTR()11.LENTH(str)讲点二:正则表达式一、简介二、语法1.字符类2.重复次数3.通配符4.......
  • C++ 成员函数指针简单测试
    classDog{public:voidUpdate_Func(shorti);short(Dog::*pfunc)(short);std::function<short(short)>ffunc;public:shortgoodMorning(shortid);shortgoodAfternoon(shortid);};voidDog::Update_Func(shorti){switch(i)......
  • Python 从入门到实战19(函数参数)
            我们的目标是:通过这一套资料学习下来,通过熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。上篇文章我们讨论了函数的基本介绍。今天我们继续学习一下函数参数。1、形参和实参我们上篇已讨论过,为了对比......
  • python的os模块的常见函数及用途详解
    os模块提供了与操作系统进行交互的功能。它允许你执行许多常见的文件系统任务,如读取目录、处理文件、获取系统信息等。以下是一些os模块中常见的函数及其用途:目录操作os.getcwd():返回当前工作目录的字符串表示。os.listdir(path):返回指定目录下的文件和子目录列表。os.mkdir(......
  • 用函数实现模块化程序设计
    #include<stdio.h>intmain(){   inthcf(int,int);   intlcd(int,int,int);   //定义两个函数,hcf表示最大公因数,lcd表示最小公倍数   inta,b,m,n;   printf("请输入两个整数\n");   scanf("%d%d",&a,&b);   m=hcf(a,b);   n=lcd(......