Python 类:探索面向对象编程的奇妙世界

在 Python 中,类是一种强大的工具,可以让你更有组织地编写代码,实现真正的面向对象编程。

本篇文章将详细介绍 Python 类的知识点和使用方法,通过通俗易懂的解释和使用案例,帮助大家轻松理解并掌握类的奥秘。

1、类和对象的基础

1.1 类的定义

在 Python 中,通过 class 关键字可以定义一个类:

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def bark(self):
        print(f"{self.name} 汪汪叫!")
  • init 方法是一个特殊的方法,用于初始化对象的属性。

  • self 表示对象本身,类似于其他语言中的 this。

通用的类模版如下:

class 类名称:
    def __init__(self, 参数):
        self.name = name  #参数赋值定义

    def 方法名(self):
        # 具体动作

就像游戏中创建角色,去定义它的属性和能力。

1.2 对象的创建和使用
通过类可以创建对象,每个对象都是类的实例:

my_dog = Dog("Buddy", 3)
my_dog.bark()  # 输出:Buddy 汪汪叫!

当我们给类传入具体的参数后,就创建了一个具体的对象。

就像我们定义了某类游戏角色的属性和能力后,我们需要把具体的属性值赋予给它才能真正应用。

如上,我们先定义了一个狗的大类,但类中狗的名字和年龄需要我们真正赋值的时候,才完成了一个对象的创建。

2、类的属性和方法

2.1 属性

类中的变量称为属性,用于存储对象的状态(相当于角色的属性):

class Circle:
    def __init__(self, radius):
        self.radius = radius

    def area(self):
        return 3.14 * self.radius ** 2

2.2 方法
类中的函数称为方法,用于定义对象的行为(相当于角色的技能):

my_circle = Circle(5)
print(my_circle.area())  # 输出:78.5

3、继承和多态

3.1 继承
继承允许一个类继承另一个类的属性和方法:

class Cat(Dog):
    def purr(self):
        print(f"{self.name} 喵喵叫!")

这就类似于能力的传承,下一代继承了上一代的全部非私有属性和能力

比如,新建的猫类继承了狗的名字和年龄属性,以及汪汪叫的能力,同时自己也会喵喵叫。

在这里插入图片描述
3.2 多态
多态允许不同类的对象对相同的方法做出响应:

#创建狗类
class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def bark(self):
        print(f"{self.name} 汪汪叫!")

#创建猫类
class Cat:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def bark(self):
        print(f"{self.name} 喵喵叫!"

#多态统一方法
def animal_sound(animal):
    animal.bark()

my_pet = Dog("Fido", 2)
animal_sound(my_pet)  # 输出:Fido 汪汪叫!

my_pet = Cat("Whiskers", 1)
animal_sound(my_pet)  # 输出:Whiskers 喵喵叫!

也就是如果两个类有相同的方法,我们可以用新的方法把他们统一起来,形成一个集合。

如上,如果猫类,狗类都有bark()的方法,那可以用叫声这一类方法把他们统一起来,从而可以把叫声统一在一起供使用。

在这里插入图片描述

4、封装

封装是将对象的属性和方法限制在类内部,防止外部直接访问。在 Python 中,使用 _ 表示属性是私有的:

class BankAccount:
    def __init__(self, balance):
        self._balance = balance

    def get_balance(self):
        return self._balance

    def deposit(self, amount):
        if amount > 0:
            self._balance += amount

如上我们定义了一个银行类,并且balance属性是私有的

进行如下操作:
在这里插入图片描述
可以看到实例化类后,并没法直接访问对象的属性。

有所收益的话,感谢关注,持续更新,一起进步~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/215975.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mac电脑如何安装git

一、简介 在Mac上安装Git之前,可以先使用git --version来查看一下是否安装了Git,因为Mac系统可能自带了Git,或者在你安装XCode(或者XCode的命令行工具)时,可能已经安装了 Git。 如果Mac还没有安装Git的话&…

论文解读:EfficientViT-提高吞吐量

摘要 要解决的问题 Vision transformers have shown great success due to their high model capabilities. However, their remarkable performance is accompanied by heavy computation costs, which makes them unsuitable for real-time applications. vit计算开销大&a…

AI大模型专题:北京市人工智能行业大模型创新应用白皮书

今天分享的是人工智能系列深度研究报告:《AI大模型专题:北京市人工智能行业大模型创新应用白皮书》。 (报告出品方:北京市科学技术委员会、中关村科技园区管理委员会) 报告共计:72页 海量/完整电子版/报…

自定义数组,循环展示对象数据

HTML <div v-for"(item, index) in dataList" :key"index"> <span>{{ item.title }}:</span> <span>{{ dataInfo[item.content] }}</span> </div> JS 需要展示的键值对放入数组中 let dataList [ { title: data1, co…

【Go】Go语言基础内容

变量声明&#xff1a; 变量声明&#xff1a;在Go中&#xff0c;变量必须先声明然后再使用。声明变量使用 var 关键字&#xff0c;后面跟着变量名和类型&#xff0c;如下所示&#xff1a; var age int这行代码声明了一个名为 age 的整数变量。 变量初始化&#xff1a;您可以在声…

Python面向对象②:属性与方法【侯小啾Python基础领航计划 系列(二十)】

Python面向对象②:属性与方法【侯小啾Python基础领航计划 系列(二十)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ�…

Centos系列:shell编程综合练习(个人学习记录)

shell编程综合练习&#xff08;个人学习记录&#xff09; shell编程until 循环跳出循环1. break命令2. continue 命令 Shell函数特殊变量输入输出重定向输出重定向输入重定向重定向 Shell实战监控centos7运行状态/proc/stat文件编写脚本free命令监控系统内存 shell编程 until …

【已解决】xxljob连接报错HTTP 302(HTTP 401账号或密码错误)

目录 问题现象&#xff1a; 问题分析&#xff1a; 1、密码中的特殊字符。 2、密码长度问题。 解决方法&#xff1a; 拓展&#xff1a; 问题现象&#xff1a; 今天在生产环境使用xxljob任务调度来创建并执行任务时&#xff0c;出现了程序报错&#xff1a; 通过查询xxljob日志…

Java集合(已重写-废弃了)

# 精辟总结 其实各种八股文资料&#xff0c;他也就是围绕着核心知识展开提问的&#xff0c;你只要根据八股文把核心知识提炼出来&#xff0c;形成核心知识体系&#xff01; Java集合那是重点中的重点。最基本的概念要懂&#xff0c;核心的概念&#xff0c;那要滚瓜烂熟。 Ja…

TEMU跨境平台与亚马逊检测认证几大认证您知道多少?

TEMU跨境平台与亚马逊检测认证几大认证您知道多少&#xff1f; TEMU跨境平台与亚马逊对于做外贸的人应该都不陌生,可是你是否知道产品入驻TEMU跨境平台与亚马逊需要办理的13大认证呢?如果你不知道,请认真阅读正面的内容,因为它关系着你的产品能否在TEMU跨境平台与亚马逊顺利上…

Cookie、Session、Token

Cookie 什么是Cookie Cookie是服务器发送给客户端并保存在客户端本地的一小块数据&#xff0c;能够在下次发送请求时携带Cookie。 Cookie是保存在客户端的&#xff0c;按存储位置分类&#xff0c;可以分为内存Cookie和硬盘Cookie。 Cookie的应用 Cookie主要用于几个方面&a…

vite的使用

vite说是面向未来的框架&#xff0c;支持esm模块化&#xff0c;虽然可以引入require插件来支持&#xff0c;commomjs不过介意别用&#xff0c;因为老旧的包和node版本问题也很多&#xff0c;对应升级的生态nuxt3和新的需要更新node版本18 20&#xff0c; 通常搭建vite就是引入l…

ROS第一个程序——helloworld

目录 一、工作空间的创建 1.创建工作空间并初始化 2.进入 src 创建 ros 包并添加依赖 二、C实现helloworld C源码实现 编辑 ros 包下的 Cmakelist.txt文件 进入工作空间目录并编译 执行 三、python实现helloworld 进入 ros 包添加 scripts 目录并编辑 python 文件 …

【源码篇】基于SpringBoot+thymeleaf实现的蓝天幼儿园管理系统

基于SpringBootthymeleaf实现的蓝天幼儿园管理系统 文章目录 系统说明技术选型成果展示账号地址及其他说明 系统说明 基于SpringBootthymeleaf实现的蓝天幼儿园管理系统是为幼儿园提供的一套管理平台&#xff0c;可以提高幼儿园信息管理的准确性&#xff0c;系统将信息准确无误…

883重要知识点

&#xff08;1&#xff09;程序结构分三种&#xff1a;顺序结构&#xff0c;选择结构&#xff0c;循环结构。 &#xff08;2&#xff09;该程序都要从main&#xff08;&#xff09;开始&#xff0c;然后从最上面往下。 &#xff08;3&#xff09;计算机的数据在电脑中保存以二…

vue+ts实现离线高德地图 内网离线高德地图

1、下载瓦片 我是用最简单的软件下载——MapDownloader 链接&#xff1a;https://pan.baidu.com/s/1Hz__HcA5QhtGmjLNezC_pQ 提取码&#xff1a;6lek 来源&#xff1a;https://blog.csdn.net/fuhanghang/article/details/131330034 2、部署私有化瓦片资源 这里也是用最简单的…

智能变压器监控系统

智能变压器监控系统是一种先进的物联网技术和智能设备&#xff0c;能够实现对变压器的实时监测和管理&#xff0c;提高变压器的运行效率和可靠性&#xff0c;为用户提供及时、准确的变压器运行状态信息和故障预警。 力安科技A30变压器云控终端是一款集变压器温控仪、变压器运行…

【每日一题】从二叉搜索树到更大和树

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;中序遍历的反序方法二&#xff1a;后缀数组 写在最后 Tag 【中序遍历】【二叉树】【2023-12-04】 题目来源 1038. 从二叉搜索树到更大和树 题目解读 在二叉搜索树中&#xff0c;将每一个节点的值替换成树中大于等于该…

百度查询界面自定义

文章目录 起因步骤 纯个人纪录 参考以下师傅链接 爱吃猫的鱼儿-浏览器设置夜间模式以及百度搜索结果单列居中 起因 发现百度查询结果都在左边&#xff0c;想着能不能居中&#xff0c;发现已经有前辈写了插件&#xff0c;遂安装使用&#xff0c;看下效果 步骤 安装插件暴力猴…

计算机基础知识63

Django的条件查询&#xff1a;查询函数 exclude exclude&#xff1a;返回不满足条件的数据 res Author.objects.exclude(pk1) print(res) # <QuerySet [<Author: Author object (2)>, <Author: Author object (3)>]> order_by 1、按照 id 升序排序 res …