Python——面向对象编程(类和对象) 1

目录

类和对象(类和对象的概念,类和对象的关系,类的设计)

[01. 类和对象的概念](#01. 类和对象的概念)

[1.1 类](#1.1 类)

[1.2 对象](#1.2 对象)

[02. 类和对象的关系](#02. 类和对象的关系)

[03. 类的设计](#03. 类的设计)

[3.1 类名的确定](#3.1 类名的确定)

[3.2 属性和方法的确定](#3.2 属性和方法的确定)

面向对象基础语法(内置函数,定义简单的类(只包含方法),方法中的self参数,初始化方法,内置方法和属性)

[01. 内置函数](#01. 内置函数)

[02. 定义简单的类(只包含方法)](#02. 定义简单的类(只包含方法))

[2.1 定义只包含方法的类](#2.1 定义只包含方法的类)

[2.2 创建对象](#2.2 创建对象)

[2.3 第一个面向对象程序](#2.3 第一个面向对象程序)

[03. 方法中的self参数](#03. 方法中的self参数)

[3.1 案例改造------给对象增加属性](#3.1 案例改造——给对象增加属性)

[3.2 使用self在方法内部输出每一只猫的名字](#3.2 使用self在方法内部输出每一只猫的名字)

04.初始化方法

[4.1 之前代码存在问题------在类的外部给对象增加属性](#4.1 之前代码存在问题——在类的外部给对象增加属性)

[4.2 初始化方法](#4.2 初始化方法)

当使用类名()创建对象时,会自动执行操作:

[1. 为对象在内存中分配空间------创建对象](#1. 为对象在内存中分配空间——创建对象)

[2. 为对象的属性设置初始值------初始化方法(self)](#2. 为对象的属性设置初始值——初始化方法(self))

[4.3 在初始化方法内部定义属性](#4.3 在初始化方法内部定义属性)

[4.4 改造初始化方法------初始化的同时设置初始值](#4.4 改造初始化方法——初始化的同时设置初始值)

05.内置方法和属性

[5.1 __del__方法](#5.1 __del__方法)

[5.2 __str__方法](#5.2 __str__方法)


类和对象(类和对象的概念,类和对象的关系,类的设计)

01. 类和对象的概念

类和对象是面向对象编程的两个核心概念。

1.1 类

类是对一群具有相同特征或者行为的事物的一个统称,是抽象的,不能直接使用。

特征被称为属性

行为被称为方法(敲黑板!在大学期末可能要考的哦,虽然实际上用不到)

类就相当于制造飞机时的图纸,是一个模板,是负责创建对象的。

1.2 对象

对象是由类创建出来的一个具体存在,可以直接使用

由哪一个类创建出来的对象,就拥有在哪一个类中定义的:属性和方法

对象就相当于用图纸制造的飞机。

02. 类和对象的关系

类是模板,对象是根据类这个模板创建出来的,应该先有类,再有对象。

类只有一个,而对象可以有很多个

不同的对象之间属性可能会各不相同。

类中定义了什么属性和方法,对象中就有什么属性和方法,不可能多,也不可能少。

03. 类的设计

在程序开发中,要设计一个类,通常要满足以下三个要素:

1.类名:这类事物的名字,满足大驼峰命名法

2.属性:这类事物具有什么特征

3.方法:这类食物具有什么样的行为

大驼峰命名法:每一个单词的首字母大写,单词与单词之间没有下划线。

例如:

3.1 类名的确定

名词提炼法分析整个业务流程,出现的名词,通常就是找到的类。

3.2 属性和方法的确定

对对象的特征描述,通常可以定义成属性。

对象具有的行为,通常可以定义为方法。

这里举个小小的例子:小明今年18岁,身高1.75,每天早上跑完步,会去吃东西

代码:

python 复制代码
class Person:  
    def __init__(self, name, age, height):  
        self.name = name  
        self.age = age  
        self.height = height  
  
    def run_in_the_morning(self):  
        print(f"{self.name} 在早上跑步了。")  
  
    def eat_after_running(self):  
        print(f"{self.name} 跑完步后去吃东西了。")  
  
# 创建一个Person对象,代表小明  
xiaoming = Person("小明", 18, 1.75)  
  
# 调用小明的方法  
xiaoming.run_in_the_morning()  
xiaoming.eat_after_running()

看不懂没关系,接着看看下面的文章吧。

面向对象基础语法(内置函数,定义简单的类(只包含方法),方法中的self参数,初始化方法,内置方法和属性)

01. 内置函数

02. 定义简单的类(只包含方法)

面向对象是更大的封装,在一个类中封装多个方法,这样通过这个类创建出来的对象,就可以直接调用这次方法了!

2.1 定义只包含方法的类

在python中要定义一个只包含方法的类,语法格式如下:

方法的定义格式和之前学习过的函数几乎一样

区别在于第一个参数必须是self,大家暂时先记住,稍后介绍self

注意:类名的规则要符合大驼峰命名法

2.2 创建对象

当一个类定义完成之后,要使用这个类来创建对象,语法格式如下:

2.3 第一个面向对象程序

需求:小猫爱吃鱼,小猫要喝水

分析:1.定义一个猫类Cat。 2.定义两个方法eat和drink。 3.按照需求------不需要定义属性

代码如下:

python 复制代码
class Cat:  
    def eat(self):  
        print("小猫爱吃鱼")  
  
    def drink(self):  
        print("小猫要喝水")  
  
# 创建一个Cat对象  
tom = Cat()  
  
# 调用eat方法  
tom.eat()  
  
# 调用drink方法  
tom.drink()

补充:

03. 方法中的self参数

3.1 案例改造------给对象增加属性

在python中,给对象设置属性,非常的容易,但是不推荐使用,因为对象属性的封装应该封装在类的内部。

只需要在类的外部的代码中直接通过"."设置一个属性即可。

例如:

注意:这种方式虽然简单,但是不推荐使用。

3.2 使用self在方法内部输出每一只猫的名字

由哪一个对象调用的方法,方法内的self就是哪一个对象的引用

在类封装的方法内部,self就表示当前调用方法的对象自己

调用方法时,程序员不需要传递self参数

在方法内部:可以通过self访问对象的属性,也可以通过self调用其他的对象方法。

改造代码如下:

04.初始化方法

4.1 之前代码存在问题------在类的外部给对象增加属性

讲案例代码进行调整,先调用方法在设置属性,观察一下执行效果

程序执行报错如下:

提示:在日常开发中,不推荐在类的外部给对象增加属性

原因:如果在运行时,没有找到属性,程序会报错。

对象应该包含的所有属性,应该封装在类的内部

4.2 初始化方法

当使用类名()创建对象时,会自动执行操作:

1. 为对象在内存中分配空间------创建对象

2. 为对象的属性设置初始值------初始化方法(self)

这个初始化方法就是__init__方法,__init__是对象的内置方法。

在Cat中增加__init__方法,验证该方法在创建对象时会自动调用

代码如下:

4.3 在初始化方法内部定义属性

在__init__方法内部使用self.属性名 = 属性初始值 就可以定义属性。

定义属性之后,再使用Cat类创建的对象,都会拥有该属性。

例子如下:

4.4 改造初始化方法------初始化的同时设置初始值

在开发中,如果希望在创建对象的同时,就设置对象的属性,可以对__init__方法进行改造

  1. 把希望设置的属性值,定义成__init__方法的参数

  2. 在方法内部使用self.属性 = 形参 接收外部传递的参数

  3. 在创建对象时,使用类名(属性1,属性2......)调用

例子如下:

05.内置方法和属性

5.1 __del__方法

在python中

当使用类名()创建对象时,为对象分配完空间后,自动调用__init__方法

当一个对象从内存中销毁前,会自动调用__del__方法

应用场景

__init__改造初始化方法,可以让创建对象更加灵活

__del__如果希望在对象被销毁的,再做一些事情,可以考虑一下__del__方法

生命周期

一个对象从调用类名()创建,生命周期开始

一个对象的__del__方法一旦被调用,生命周期结束

在对象的生命周期内,可以访问对象属性,或者让对象调用方法

5.2 __str__方法

在python中,使用print输出对象变量,默认情况下,会输出这个变量引用的对象是哪一个类创建的对象,以及在内存中地址(十六进制表示)

如果在开发中,希望使用print输出对象变量时,能够打印自定义的内容,就可以访问__str__这个内置方法了

例子如下:大家可以自己运行试试

注意:__str__方法必须返回一个字符串。

好啦!这是面向对象编程的第一期,往后还有六期,请大家关注我的后续博文。

相关推荐
技术仔QAQ19 分钟前
【tokenization分词】WordPiece, Byte-Pair Encoding(BPE), Byte-level BPE(BBPE)的原理和代码
人工智能·python·gpt·语言模型·自然语言处理·开源·nlp
WangYaolove131428 分钟前
请解释Python中的装饰器是什么?如何使用它们?
linux·数据库·python
我是哈哈hh28 分钟前
HTML5和CSS3的进阶_HTML5和CSS3的新增特性
开发语言·前端·css·html·css3·html5·web
宋发元1 小时前
如何使用正则表达式验证域名
python·mysql·正则表达式
Dontla1 小时前
Rust泛型系统类型推导原理(Rust类型推导、泛型类型推导、泛型推导)为什么在某些情况必须手动添加泛型特征约束?(泛型trait约束)
开发语言·算法·rust
XMYX-01 小时前
Python 操作 Elasticsearch 全指南:从连接到数据查询与处理
python·elasticsearch·jenkins
正义的彬彬侠1 小时前
sklearn.datasets中make_classification函数
人工智能·python·机器学习·分类·sklearn
belldeep2 小时前
python:用 sklearn 转换器处理数据
python·机器学习·sklearn
安静的_显眼包O_o2 小时前
from sklearn.preprocessing import Imputer.处理缺失数据的工具
人工智能·python·sklearn
安静的_显眼包O_o2 小时前
from sklearn.feature_selection import VarianceThreshold.移除低方差的特征来减少数据集中的特征数量
人工智能·python·sklearn