Python基础(十三):面向对象基础语法

简介: 在 Python 中 对象几乎是无所不在的,我们之前学习的 变量、数据、函数 都是对象

目录

🌹前言

目标

1. dir 内置函数(知道)

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

2.1 定义只包含方法的类

2.2 创建对象

2.3 第一个面向对象程序

3. 方法中的 self 参数

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

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

4. 初始化方法

4.1 在类的外部给对象增加属性

4.2 初始化方法

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

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

5. 内置方法和属性

5.1 `__del__` 方法(知道)

5.2 __str__ 方法

🌹前言

小袁开始更新Python系列教学文章了,从零带你入门,期待的你的关注❤️❤️

第一篇文章:Python基础(一):python和vscode环境安装

第二篇文章:Python基础(二):入门必备

第三篇文章:Python基础(三):运算符

第四篇文章:Python基础(四):数据类型

第五篇文章:Python基础(五):基础语句

第六篇文章:Python基础(六):函数

第七篇文章:Python基础(七):高级变量类型复习

第八篇文章:Python基础(八):名片管理系统

第九篇文章:Python基础(九):变量进阶

第十篇文章:Python基础(十):函数进阶

第十一篇文章:Python基础(十一):面向对象基本概念

第十二篇文章:Python基础(十二):类与对象

第十三篇文章:Python基础(十三):面向对象基础语法

第十四篇文章:博主正在加紧编写中…


目标

dir 内置函数

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

方法中的 self 参数

初始化方法

内置方法和属性

1. dir 内置函数(知道)

在 Python 中 对象几乎是无所不在的,我们之前学习的 变量、数据、函数 都是对象


在 Python 中可以使用以下两个方法验证:


1.在 标识符 / 数据 后输入一个 .,然后按下 TAB 键,Python 会提示该对象能够调用的 方法列表

2.使用内置函数 dir 传入 标识符 / 数据,可以查看对象内的 所有属性及方法

提示: __方法名__ 格式的方法是 Python 提供的 内置方法 / 属性,稍后会给大家介绍一些常用的 内置方法 / 属性


方法名 类型 作用

__new__ 方法 创建对象时,会被 自动 调用

__init__ 方法 对象被初始化时,会被 自动 调用

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

__str__ 方法 返回对象的描述信息,print 函数输出使用

提示:利用好 dir() 函数,在学习时很多内容就不需要死记硬背了


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

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


2.1 定义只包含方法的类

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


class 类名:
    def 方法1(self, 参数列表):
        pass
    def 方法2(self, 参数列表):
        pass

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


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


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


2.2 创建对象

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


对象变量 = 类名()

2.3 第一个面向对象程序

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


分析


定义一个猫类 Cat

定义两个方法 eat 和 drink

按照需求 —— 不需要定义属性

image.png

class Cat:
    """这是一个猫类"""
    def eat(self):
        print("小猫爱吃鱼")
    def drink(self):
        print("小猫在喝水")
tom = Cat()
tom.drink()
tom.eat()

引用概念的强调:


在面向对象开发中,引用的概念是同样适用的!


在 Python 中使用类 创建对象之后,tom 变量中 仍然记录的是 对象在内存中的地址

也就是 tom 变量 引用 了 新建的猫对象

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

提示:在计算机中,通常使用 十六进制 表示 内存地址


十进制 和 十六进制 都是用来表达数字的,只是表示的方式不一样


十进制 和 十六进制 的数字之间可以来回转换


%d 可以以 10 进制 输出数字


%x 可以以 16 进制 输出数字


案例进阶 —— 使用 Cat 类再创建一个对象


lazy_cat = Cat()
lazy_cat.eat()
lazy_cat.drink()

提问:tom 和 lazy_cat 是同一个对象吗?

image.png



3. 方法中的 self 参数

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

在 Python 中,要 给对象设置属性,非常的容易,但是不推荐使用


因为:对象属性的封装应该封装在类的内部

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


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

tom.name = "Tom"
...
lazy_cat.name = "大懒猫"

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

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


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


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


在方法内部:


可以通过 self. 访问对象的属性

也可以通过 self. 调用其他的对象方法

改造代码如下:

class Cat:
    def eat(self):
        print("%s 爱吃鱼" % self.name)
tom = Cat()
tom.name = "Tom"
tom.eat()
lazy_cat = Cat()
lazy_cat.name = "大懒猫"
lazy_cat.eat()

image.png


在 类的外部,通过 变量名. 访问对象的 属性和方法

在 类封装的方法中,通过 self. 访问对象的 属性和方法

4. 初始化方法

4.1 在类的外部给对象增加属性

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


tom = Cat()
tom.drink()
tom.eat()
tom.name = "Tom"
print(tom)

程序执行报错如下:


AttributeError: 'Cat' object has no attribute 'name'
属性错误:'Cat' 对象没有 'name' 属性

提示:


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

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

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

4.2 初始化方法

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


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

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

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


__init__ 方法是 专门 用来定义一个类 具有哪些属性的方法!


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

class Cat:
    """这是一个猫类"""
    def __init__(self):
        print("初始化方法")

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

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

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

class Cat:
    def __init__(self):
        print("这是一个初始化方法")
        # 定义用 Cat 类创建的猫对象都有一个 name 的属性
        self.name = "Tom"
    def eat(self):
        print("%s 爱吃鱼" % self.name)
#使用类名()创建对象的时候,会自动调用初始化方法 __init__
tom = Cat()
tom.eat()

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

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


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

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

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

class Cat:
    def __init__(self, name):
        print("初始化方法 %s" % name)
        self.name = name
    ...
tom = Cat("Tom")
...
lazy_cat = Cat("大懒猫")
...

5. 内置方法和属性

方法名 类型 作用

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

__str__ 方法 返回对象的描述信息,print 函数输出使用

5.1 __del__ 方法(知道)

在 Python 中:


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

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

应用场景:


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

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

生命周期:


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

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

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

class Cat:
    def __init__(self, new_name):
        self.name = new_name
        print("%s 来了" % self.name)
    def __del__(self):
        print("%s 去了" % self.name)
# tom 是一个全局变量
tom = Cat("Tom")
print(tom.name)
# del 关键字可以删除一个对象
del tom
print("-" * 50)

5.2 str 方法

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

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

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


class Cat:
    def __init__(self, new_name):
        self.name = new_name
        print("%s 来了" % self.name)
    def __del__(self):
        print("%s 去了" % self.name)
    def __str__(self):
        return "我是小猫:%s" % self.name
tom = Cat("Tom")
print(tom)


相关文章
|
3月前
|
人工智能 Ubuntu IDE
【Python】基础:环境配置与基础语法
本文介绍了Python编程语言及其环境配置方法。Python由Guido van Rossum于1991年创建,以其简洁、易学和强大的功能著称。文章详细讲解了Python的主要特点、Windows和Ubuntu下的安装配置步骤、基础语法、控制流、函数、文件操作、模块使用及面向对象编程等内容,帮助读者快速入门Python编程。
91 4
|
3月前
|
Java 程序员 C++
Python 面向对象详解!
本文详细介绍了Python中的面向对象编程(OOP),包括类、对象、继承、封装、多态和抽象等核心概念。通过具体示例,解释了如何使用类定义对象的属性和方法,以及如何通过继承实现代码重用。文章还探讨了封装和多态的重要性,并介绍了私有属性和抽象类的使用方法。最后,总结了OOP的四大支柱:封装、抽象、继承和多态,强调了这些概念在Python编程中的应用。适合Java程序员扩展Python编程知识。
87 2
|
2月前
|
IDE 数据挖掘 开发工具
Python作为一种广受欢迎的高级编程语言,以其简洁的语法和强大的功能吸引了众多初学者和专业开发者
Python作为一种广受欢迎的高级编程语言,以其简洁的语法和强大的功能吸引了众多初学者和专业开发者
41 7
|
1月前
|
关系型数据库 开发者 Python
Python编程中的面向对象设计原则####
在本文中,我们将探讨Python编程中的面向对象设计原则。面向对象编程(OOP)是一种通过使用“对象”和“类”的概念来组织代码的方法。我们将介绍SOLID原则,包括单一职责原则、开放/封闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则有助于提高代码的可读性、可维护性和可扩展性。 ####
|
2月前
|
存储 索引 Python
Python 的基本语法
这些是 Python 的基本语法要素,掌握它们是学习和使用 Python 的基础。通过不断地实践和应用,你将能够更深入地理解和熟练运用这些语法知识,从而编写出高效、简洁的 Python 代码
86 5
|
2月前
|
存储 Python
Python编程入门:理解基础语法与编写简单程序
本文旨在为初学者提供一个关于如何开始使用Python编程语言的指南。我们将从安装Python环境开始,逐步介绍变量、数据类型、控制结构、函数和模块等基本概念。通过实例演示和练习,读者将学会如何编写简单的Python程序,并了解如何解决常见的编程问题。文章最后将提供一些资源,以供进一步学习和实践。
53 1
|
3月前
|
Python
Python面向对象(2)
【10月更文挑战第14天】
Python面向对象(2)
|
2月前
|
机器学习/深度学习 数据挖掘 开发者
Python编程入门:理解基础语法与编写第一个程序
【10月更文挑战第37天】本文旨在为初学者提供Python编程的初步了解,通过简明的语言和直观的例子,引导读者掌握Python的基础语法,并完成一个简单的程序。我们将从变量、数据类型到控制结构,逐步展开讲解,确保即使是编程新手也能轻松跟上。文章末尾附有完整代码示例,供读者参考和实践。
|
3月前
|
设计模式 程序员 C语言
Python面向对象
【10月更文挑战第13天】
Python面向对象
|
2月前
|
存储 Python Perl
python正则语法
本文介绍了正则表达式的基础知识及其在 Python 中的应用。首先解释了为什么要使用正则表达式,通过一个判断手机号的示例展示了正则表达式的简洁性。接着详细介绍了 `re` 模块的常用方法,如 `match()`、`search()`、`findall()`、`finditer()` 等,并讲解了正则表达式的基本语法,包括匹配单个字符、数字、锚字符和限定符等。最后,文章还探讨了正则表达式的高级特性,如分组、编译和贪婪与非贪婪模式。
27 2