在学习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!

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

  1. python的内置函数列表排序_Python 列表的排序 - sort/sorted

    Python 集合的遍历,推导及 filter/map/reduce 操作 中讲了对集合的 filter, map 和 reduce 操作,那还有 sort 排序呢?像 Java 一样,Python  ...

  2. python写csv文件按升序排列_用python给csv里的数据排序的具体代码

    1.使用argparse组件,获取命令行参数:使用re组件,获取需要查找的字符串所在行 2.使用pandas组件,对文件进行排序. 3.命令行执行数据获取及排序,写入文件: 以下是完整代码: #cod ...

  3. python 列表排序_python列表排序有哪些

    python列表排序:1.冒泡排序,是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来:2.插入排序,通过构建有序序列,对于未排序数据,在已排序序列中 ...

  4. python类的特殊方法汇总_Python笔记001-类的特殊方法

    Python笔记001-类的特殊方法 以下是我学习<流畅的Python>后的个人笔记,现在拿出来和大家共享,希望能帮到各位Python学习者. 首次发表于: 微信公众号:科技老丁哥,ID: ...

  5. python用户输入字符串串从小到大排序_python字符串从小到大排序

    python字符串排序问题 a='AADFabddefgilmrsss' 请将该字符串a里的单词重新排序(a-z),并且重def char_cmp(a, b): #实现你的比较规则, 分太少,不值为你 ...

  6. pythonfor循环列表排序_Python使用for循环对列表内元素进行排序方法

    这篇文章介绍Python使用for循环对列表内元素进行排序方法list = [13, 22, 6, 99, 11] for m in range(len(list)-1): for n in rang ...

  7. python从键盘获取输入并排序_python从键盘输入数字并排序-女性时尚流行美容健康娱乐mv-ida网...

    女性时尚流行美容健康娱乐mv-ida网 mvida时尚娱乐网 首页 美容 护肤 化妆技巧 发型 服饰 健康 情感 美体 美食 娱乐 明星八卦 首页 > 高级搜索 python 读取 键盘 输入 ...

  8. Python list sort方法:列表排序

    目录 描述 语法 使用示例 对列表进行排序 指定权值 逆序排序 注意事项 改变原列表顺序 2. 列表元素类型不一致 3. Python早些版本 描述 list.sort方法是Python的列表方法,用 ...

  9. python中什么叫类、什么叫对象_python中的类面向对象的基本概念!

    一.概述 今天我们讲述Python中的类&面向对象的基本概念. 首先我们为什么要学习面向对象,我讲一个故事,应该就可以明白了.在古时候,官府衙门如果要颁布什么告示就会去找工匠将命令中的字都雕刻 ...

最新文章

  1. 元宇宙大热后将陷低潮, 虚实互联网更准确, 2030前后才可能全面热启
  2. Fluently NHibernate 插入CLOB字段
  3. 微信开发接口调用(前端+.net服务端)
  4. Quartz 之入门示例
  5. 深度残差收缩网络再次理解(论文地址+代码地址+代码理解)
  6. python开发效率高吗_从运行效率与开发效率比较Python和C++
  7. 中央2套-理财教室-如何购买保险
  8. mats检测工具 400版_川崎新款忍者400新配色发布
  9. Atitit 数据库重复数据产生原因与解决总结 目录 1. 原因 1 1.1. 缺少数据约束校验 1 1.2. 表关系关联设计错误 1 2. 约束种类 1 2.1. 分类 表级约束vs列级别约束 2
  10. 汉诺塔c语言代码实现
  11. 售前工程师是做什么的?
  12. i春秋 - Exploit-Exercises: Nebula - level00
  13. CentOS 8 添加中文语言包
  14. 2021技术人的百宝黑皮书
  15. javascript基础常识问答(七)
  16. 李白的诗: 南陵别儿童入京
  17. 西部世界:生存(WestLand Survival) 游戏攻略
  18. 金山打字通83字/分
  19. Python模块管理的入门详解,初学者福利
  20. 今日芯声 | 叮咚!您的2019蚊子预报地图已出炉

热门文章

  1. linux中文系统换英文字体,linux系统下肿么切换字体?
  2. ROS2学习(九).ROS概念 - ROS 2参数(ROS 2 parameters)
  3. 任给十进制整数,请从低位到高位……
  4. 信息竞赛进阶指南--单调栈(模板)
  5. 『ACM-算法-二分法』算法竞赛进阶指南--在单调递增序列a中查找大于等于X的数中最小的一个,即X或X的后继
  6. springcloud 之服务注册与发现 Eureka Client
  7. Java通过IText导出word和pdf
  8. hands-on Machine Learning with sklearn
  9. C语言高级编程:i++与++i区别
  10. libusb开发指南