python class类里给列表排序_python笔记:Class(类)

在学习python代码中,你是否看到过Class这个词?你是否见过__init__这样的代码?有的书里把这部分内容讲的太过“专业”,导致我看了也看不懂。直到看Python Crash Course这本书关于这部分讲解,才明白什么是Class。其实如果之前的function能理解的话,学习Class也不是非常难。这篇笔记就是记录有关class的基础结构和基本的使用(更多内容请阅读该书第九章)

你可以使用“类”为任何东西建立模型。让我们从编写一个简单的“类”开始,这个类的名字叫Dog,它表示一条狗——不是特定的一条狗,而是任意一条狗。对大多数宠物狗他们都有名字和年龄。我们还知道,大多数狗都会坐着和打滚。这两条信息(name和age)和这两种行为(sit和roll over)将在这个例子里,因为它们对大多数狗来说都很常见。这个类将告诉Python如何创建一个表示狗的对象。编写完类之后,我们将使用它来创建单独的实例(instance),每个实例代表一个特定的dog。

(一)创建一个class

从类创建的每个实例将存储一个名称name和一个年龄age,我们将给每只狗提供sit()和roll_over():

1) class Dog:

2) """A simple attempt to model a dog."""

3) def __init__(self, name, age):

"""Initialize name and age attributes."""

4) self.name = name

self.age = age

5) def sit(self):

"""Simulate a dog sitting in response to a command."""

print(f"{self.name} is now sitting.")

def roll_over(self):

"""Simulate rolling over in response to a command."""

print(f"{self.name} rolled over!")

在1)处,我们定义了一个名为Dog的类。按照惯例,大写的名称在Python中指代类。在类定义中没有括号,因为我们是从头创建这个类。在2)处,我们写一个文档字符串(docstring)来描述这个类做什么。

(1) __init__ ()方法

作为类的一部分的function就是方法(method)。你学过的function知识也适用于方法。目前唯一的实际区别是我们调用方法的方式。在3)处的__init__()方法是一个特殊的method,每当我们基于Dog类创建一个新实例时,Python都会自动运行该方法。这个方法有两个前导下划线和两个后置下划线,这个惯例有助于防止Python的默认方法名与method名冲突。请确保在__init__()的两边都使用两个下划线。我们定义__init__()方法有三个参数:self、name和age。self参数在方法定义中是必需的,而且它必须在其他参数之前出现。它必须包含在定义中,因为当Python在稍后调用该方法(创建Dog实例)时,将自动传递self参数。每个与实例关联的方法调用都会自动传递self。当创建Dog的实例时,Python将从Dog类调用__init__()方法。将name和age作为参数传递给Dog(),self会自动传递,所以我们不需要传递它。每当我们想要从Dog类创建一个实例时,我们只需提供最后两个参数的值,name和age。

在4)处定义的两个变量都有前缀self。任何带self前缀的变量都可以用于类中的每个方法,而且我们还能够通过从类创建的任何实例访问这些变量。self.name = name接受与参数名相关联的值,并将其赋值给变量名,然后将变量名附加到正在创建的实例上。self.age = age也是一样的。可以通过这样的实例访问的变量称为属性(attributes)。

在5)处,这个Dog类还定义了另外两个方法:sit()和roll_over() 。因为这些方法不需要额外的信息来运行,所以我们定义它们只有一个参数self。我们稍后创建的实例能够访问这些方法。目前,sit()和roll_over()只是打印信息。但是这个概念可以扩展到现实情况:如果这个类是一个真实的电脑游戏的一部分,那么这些方法将包含让动画狗坐下和翻滚的代码。

(二)从class里创建一个实例

可以将类看作是一组关于如何创建实例的指令。Dog类是一组指令,告诉Python如何创建代表特定狗的单个实例。

让我们用一个实例来代表一只特定的狗(实际上就是指定参数的值,并且调用methods):

my_dog = Dog('Willie', 6)

print(f"My dog's name is {my_dog.name}.")

print(f"My dog is {my_dog.age} years old.")

我们在这里使用的Dog类是我们在上面刚刚编写的类(class)。这里,我们告诉python创建一只名叫“Willie”的6岁狗。当Python读取这一行时,它调用Dog中的__init__()方法,参数为'Willie'和6。__init__()方法创建一个表示这只特定狗的实例,并使用我们提供的值设置name和age属性。然后Python返回一个表示这条狗的实例。我们将该实例赋值给变量my_dog。这里的命名的惯例很有帮助:我们通常可以假设大写的名字(如Dog)指的是一个类,小写的名字(如my_dog)指的是从一个类创建的单个实例。

运行后的结果:

My dog's name is Willie.

My dog is 6 years old.

(1)访问attributes

如果你要访问一个实例里的attributes,在上面的例子里就是name 和age:

my_dog.name

得到的结果是:

'Willie'

点符号在Python中经常使用。这个语法演示了Python如何查找属性的值。在这里,Python查看my_dog实例,然后找到与my_dog相关联的属性名。这个属性与Dog类中的self.name相同。

(2)调用methods

在创建了一个实例后,我们可以使用点符号来调用Dog类里的任何methods:

my_dog.sit()

my_dog.roll_over()

要调用一个方法,请给出实例的名称(在本例中为my_dog)和你想要调用的方法,并用点分隔。当Python读取my_dog.sit()时,它在Dog类中寻找sit()方法并运行该代码。Python以同样的方式解释my_dog.roll_over()行。

所以运行后的结果是:

Willie is now sitting.

Willie rolled over!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity URP中根据深度重建世界坐标

通过深度值重建世界坐标,可以做出很多有意思的后处理效果,先实现下度值重建世界坐标这个功能。 一.验证重建效果 首先,得先找到一种证明反推回世界空间位置正确的方法。在相机前摆放几个物体,尽量使之在世界坐标下的位置小于1&a…

dubbo yml配置_Spring boot 的profile功能如何实现多环境配置自动切换

通常服务端应用开发需要经过以下几个流程:开发 -> 测试 -> RC验证 -> 上线这就涉及到四个不同的环境,开发环境、测试环境、RC环境以及生产环境,为了避免不同环境之间相互干扰,通常需要独立部署数据库、缓存服务器等&…

Unity中的SystemInfo.deviceUniqueIdentifier 唯一ID

做游戏时可能经常使用SystemInfo.deviceUniqueIdentifier作为用户的唯一ID进行注册登录, 但是你会发现从谷歌商店上下载的自己游戏,和自己从Unity工程中直接打包出来的游戏账号竟然是不一致的! 这个坑还是很坑爹的,纠其原因是Sy…

python中转义符的用法大全_Python转义字符及用法

前面已经提到,在字符串中可以使用反斜线进行转义;如果字符串本身包含反斜线,则需要使用“\”表示,“\”就是转义字符。Python 当然不会只支持这么几个转义字符, Python 支持的转义字符如表 1 所示:表 1 Pyt…

sketchup生成面域插件_独家教程 | 快速抓取“高精准”场地信息,康石石教你生成不同“体量”地形...

无论建筑设计还是景观设计,同学们的设计项目都必须依托于场地来进行,通过分析场地的区位范围、地形地势,结合场地的局限性与可能性,才能进一步展开项目设计。可以说,获取场地信息是同学们在作品集创作中最重要的环节之…

Unity URP高度雾效果Shader

实现原理 见这篇文章Unity Shader-深度相关知识总结与效果实现(LinearDepth,Reverse Z,世界坐标重建,软粒子,高度雾,运动模糊,扫描线效果)_puppet_master的专栏-CSDN博客_shader深度…

无限重启_三星蓝光播放器出现无限自动重启BUG,涉及不少用户及不同型号

三星的蓝光播放器似乎遇到了一个挺严重的BUG,使得不少用户都开机后播放器会自动不停重启。从reddit、ZDNet以及三星技术支持论坛上面的情况来看,这次的问题波及不同型号的播放器,大部分用户遇到的问题都是不停重启。其中一位用户表示:“开机之…

python getattr_Python 内置方法和属性应用:反射和单例

1. 前言python除了丰富的第三方库外,本身也提供了一些内在的方法和底层的一些属性,大家比较常用的如dict、list、set、min、max、range、sorted等。笔者最近在做项目框架时涉及到一些不是很常用的方法和属性,在本文中和大家做下分享。2. 内置…

Unity URP世界空间后处理扫描圈效果Shader

实现原理 见这篇文章Unity Shader-深度相关知识总结与效果实现(LinearDepth,Reverse Z,世界坐标重建,软粒子,高度雾,运动模糊,扫描线效果)_puppet_master的专栏-CSDN博客_shader深度…

前端 重构时需要注意的事项_前端数据层落地实践

源宝导读:天际移动平台经过重构改版,近期正式发布了1.0版本,我们在低代码开发方面做了进一步增强。本文主要围绕前端Model、前端业务逻辑(领域模型)、数据层与视图层解耦(包装器模式)3个方面,给大家分享一下统一数据层方案的设计思…

postconstruct_@PostConstruct注解,你该好好看看

在最近的工作中,get到一个很实用的注解,分享给诸位。痛点做过微信或支付宝支付的童鞋,可能遇到过这种问题,就是填写支付结果回调,就是在支付成功之后,支付宝要根据我们给的地址给我们进行通知,通…

Unity URP运动模糊效果Shader

实现原理 见这篇文章Unity Shader-深度相关知识总结与效果实现(LinearDepth,Reverse Z,世界坐标重建,软粒子,高度雾,运动模糊,扫描线效果)_puppet_master的专栏-CSDN博客_shader深度…

线性系统的频率响应分析实验报告_动态系统的建模与分析

参考:DR_CAN1.介绍解决一个控制系统的问题:对研究对象进行分析控制器设计测试分析被控对象的物理特性及动态表现,在这个基础上建立数学模型,数学模型可以是动力学模型、热力学模型、流体力学模型和经济学模型等,然后在…

android 生命周期_Android生命周期组件 Lifecycle 源码详解(一)

在上篇文章:warmcheng:Android生命周期组件 Lifecycle 使用详解​zhuanlan.zhihu.com中,我们讲了 Lifecycle 的简单使用,本篇我们来研究下它的源码。 基础环境搭建首先,按照上篇文章所讲,快速搭建环境。添加…

Leetcode1143. 最长公共子序列(c#)

题解&#xff1a;力扣 public class Solution{public int LongestCommonSubsequence(string text1, string text2){int num1 text1.Length;int num2 text2.Length;int[,] dp new int[num1 1, num2 1];for(int i 0; i < num1; i){for(int j 0; j < num2; j){if(t…

telnet到设备里 php_PHP自动生成设备周检修计划

背景维修人员根据设备年度检修计划&#xff0c;然后制订周检修计划(设备年度计划包含设备一年需要维护几次等信息&#xff0c;根据年度计划分解到某一个周去执行)。在这个过程中&#xff0c;大量的excel复制粘贴工作&#xff0c;浪费人力并且容易出错。并且在审核过程中&#x…

通俗讲解:图像傅里叶变换

转自某乎&#xff1a;通俗讲解&#xff1a;图像傅里叶变换 - 知乎 这里我们主要要讲的是二维图像傅里叶变换&#xff0c;但是我们首先来看一张很厉害的一维傅里叶变换动图。 妈耶~厉害哇&#xff01;它把时域和频域解释的很清楚&#xff01; 什么&#xff01;你看不懂&#x…

数据库断线重连_干货分享—Niushop数据库配置

前几期阿牛ger主讲了代码编码规范&#xff0c;整洁规范的代码有利于我们查询和再次开发&#xff0c;也方便我们检测与修复bug&#xff01;这期&#xff0c;阿牛ger主要与大家分享数据库编码配置&#xff1a;数据库配置Niushop数据库配置方式与thinkphp相同&#xff0c;文件路径…

怎么将matlab滤波器系数导出_matlab与FPGA数字信号处理系列(1)——通过matlab工具箱设计FIR数字滤波器...

以99阶FIR低通滤波器为例&#xff0c;学习使用matlab的fdatool工具箱设计滤波器&#xff0c;并将滤波器系数导出到.coe文件&#xff0c;联合Vivado进行FPGA的FIR滤波器设计。本文滤波器参数为&#xff1a;低通FIR滤波器&#xff0c;窗函数设计&#xff0c;采用布莱克曼窗&#…

UGUI 合批原理

转自&#xff1a; UGUI合批原理笔记 - 赵青青 - 博客园 UGUI合批规则图解_时光不染-CSDN博客_ugui合批规则 合批的过程# 网格更新机制# Cavans.SendWillRenderCanvas m_LayoutRebuildQueuem_GraphicRebuildQueueCanvas.BuildBatch 更新所有DrawCall WaitingForJob 子线程网格…