对象操作篇

文章目录

  • 9.1 dir()
  • 9.2 hash()
  • 9.3 help()
  • 9.4 id()
  • 9.5 type()

9.1 dir()

dir() 是 Python 中的一个内置函数,用于返回一个对象的所有属性和方法的列表。当dir()不带参数调用时,它会返回当前作用域中的变量、方法和定义的类型列表。如果dir()带有一个参数,它将返回该对象的所有属性和方法。

这里有一些使用 dir() 的例子:

# 列出当前作用域中的变量和函数
print(dir())# 列出一个模块的所有函数和变量
import math
print(dir(math))# 列出一个类的所有属性和方法
class MyClass:def __init__(__self__):passdef my_method(self):passmy_instance = MyClass()
print(dir(my_instance))# 列出内置函数和异常
print(dir(__builtins__))

当dir()用于模块时,它通常返回模块的公共函数、变量和类的列表。当dir()用于对象实例时,它返回该实例的属性和方法的列表,包括从父类继承来的那些。

需要注意的是,dir()返回的列表可能包含特殊的方法名(如__init__、__str__等),这些方法名以双下划线开头和结尾,并且在Python中具有特殊的意义。此外,dir()返回的列表并不是固定的,因为它可能包括由对象定义的动态属性。

在调试和了解对象结构时,dir()是一个非常有用的工具。

9.2 hash()

hash() 是 Python 中的内置函数,用于返回一个对象的哈希值(hash value)。哈希值是一个整数,它是通过哈希算法计算得出的,该算法旨在对于不同的输入(即不同的对象)尽可能产生不同的输出(即哈希值)。

哈希值主要用于数据结构如字典(dict)的键(key),因为它们需要能够快速并且唯一地标识一个对象。字典通过使用哈希表来存储键值对,其中键的哈希值用于快速查找对应的值。

哈希算法的一个关键特性是,如果两个对象的哈希值相同(这种情况称为哈希冲突),那么这两个对象不一定相等;但如果两个对象相等(即使用 == 运算符比较结果为 True),则它们的哈希值必须相同。

需要注意的是,不是所有的对象都可以被哈希。例如,列表(list)和字典(dict)等可变对象就不能被哈希,因为它们的内容可以改变,这会导致哈希值不再有效。只有不可变(immutable)的对象,如整数、浮点数、字符串和元组(如果元组的内容也是不可变的),才能被哈希。

下面是一些使用 hash() 函数的例子:

# 字符串的哈希值
hash_value_str = hash("hello")
print(hash_value_str)  # 输出一个整数# 整数的哈希值
hash_value_int = hash(123)
print(hash_value_int)  # 输出一个整数# 元组的哈希值(如果元组内容不可变)
hash_value_tuple = hash((1, 2, 3))
print(hash_value_tuple)  # 输出一个整数# 列表不能被哈希
# hash_value_list = hash([1, 2, 3])  # 这会抛出 TypeError# 尝试哈希一个不可哈希的类型会抛出 TypeError
try:hash_value_dict = hash({"key": "value"})  # 抛出 TypeError
except TypeError as e:print(e)  # 输出错误信息

在上面的例子中,字符串、整数和不可变元组都可以被哈希,并会返回相应的整数哈希值。而尝试哈希一个列表(可变对象)或字典会抛出 TypeError 异常。

9.3 help()

help() 是 Python 中的一个内置函数,它提供了一个交互式的帮助系统。当你在 Python 解释器或交互式环境中调用 help() 时,它会打开一个帮助会话,你可以在这个会话中查询模块、关键字、属性、方法等的帮助信息。

你可以通过以下几种方式使用 help() 函数:

不带参数调用:这将启动一个交互式的帮助系统,你可以在其中输入模块、类、方法或函数的名称来获取相应的帮助信息。```python
help()
```
查询模块:你可以直接查询某个模块的帮助信息。
```
python
help(module_name)
```
查询关键字:你可以查询 Python 语言的关键字。
```
python
help('keywords')
```
查询函数或方法:你可以查询某个函数或方法的帮助信息。
```
python
help(function_name)
```
查询类:你可以查询某个类的帮助信息,包括其方法、属性等。
```
python
help(class_name)
```
查询字符串方法:你可以查询字符串等内置类型的方法。
```
python
help('string methods')
```

当你输入一个查询后,help() 会显示与该查询相关的详细信息,包括函数的参数、返回值、用途等。

这里是一个简单的例子,展示如何使用 help() 查询一个内置函数的帮助信息:

# 查询 print 函数的帮助信息
help(print)

输出将类似于以下内容:

Help on built-in function print in module builtins:print(...)print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)Prints the values to a stream, or to sys.stdout by default.Optional keyword arguments:file:  a file-like object (stream); defaults to the current sys.stdout.sep:   string inserted between values, default a space.end:   string appended after the last value, default a newline.flush: whether to forcibly flush the stream.

help() 函数是 Python 中获取代码帮助的一个非常有用的工具,尤其是在你忘记某个函数或方法的用法时。

9.4 id()

id() 是 Python 的内置函数,它返回一个对象的“身份”标识符,这个标识符通常是一个整数。这个“身份”标识符是对象在内存中的唯一地址,它对于该对象的生命周期来说是恒定的,即只要对象存在,它的 id() 值就不会改变。

在 Python 中,对象的身份是唯一的,即使两个对象的内容完全相同(例如两个包含相同元素的列表),它们的 id() 值也会是不同的,因为它们在内存中的地址是不同的。

下面是一些使用 id() 的例子:

# 获取整数的身份标识符
print(id(123))  # 输出一个整数,代表这个整数的内存地址# 获取字符串的身份标识符
print(id("hello"))  # 输出一个整数,代表这个字符串的内存地址# 获取列表的身份标识符
my_list = [1, 2, 3]
print(id(my_list))  # 输出一个整数,代表这个列表的内存地址# 即使两个列表内容相同,它们的身份标识符也不同
other_list = [1, 2, 3]
print(id(other_list))  # 输出另一个整数,与 my_list 的 id 不同# 身份标识符在对象的生命周期中保持不变
print(id(my_list))  # 再次打印 my_list 的身份标识符,值应该与前面相同

id() 函数通常用于调试和性能分析,因为它可以帮助你了解对象在内存中的位置。但是,需要注意的是,由于对象的身份标识符是内存地址的整数表示,所以它可能因程序的运行环境和垃圾回收等因素而变化,因此不应该被用于持久化对象的唯一标识。

在 Python 中,更常用的对象是持久化标识的是对象的哈希值,通过 hash() 函数获得。然而,哈希值对于不可变类型是固定的,但对于可变类型则可能随着对象内容的改变而改变。

9.5 type()

type() 是 Python 中的一个内置函数,它用于返回一个对象的类型。当你对一个对象使用 type() 函数时,它会返回这个对象的数据类型。

这里有一些使用 type() 函数的例子:

# 获取整数的类型
print(type(123))  # <class 'int'># 获取字符串的类型
print(type("hello"))  # <class 'str'># 获取列表的类型
my_list = [1, 2, 3]
print(type(my_list))  # <class 'list'># 获取自定义类的实例类型
class MyClass:passobj = MyClass()
print(type(obj))  # <class '__main__.MyClass'># 获取模块的类型
import math
print(type(math))  # <class 'module'># 获取函数的类型
def my_function():passprint(type(my_function))  # <class 'function'>type() 函数也可以用来动态地创建类型。例如,你可以使用 type() 函数来动态地创建一个新的类:python
# 动态地创建一个新的类
MyNewClass = type('MyNewClass', (object,), {'hello': lambda x: x * 2})# 创建该类的实例并调用其方法
instance = MyNewClass()
print(instance.hello(5))  # 输出 10

在这个例子中,type() 函数接受三个参数:

  • 类名(字符串)
  • 基类的元组(通常至少包含一个对象,通常是 object,表示新类继承自基本对象类型)
  • 一个字典,其中包含了新类的属性和方法

type() 函数在这种情况下被用作一个元类(metaclass)来创建类。元类是创建类的“类”,它们用于控制类的创建行为。在大多数应用中,你不需要直接使用元类,但是了解它们的概念和用法可以帮助你更深入地理解 Python 的面向对象编程。

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

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

相关文章

从零开始学HCIA之网络自动化02

1、Python 是一种解释型&#xff08;即不需要编译环节&#xff09;的、面向对象&#xff08;即支持面向对象的风格或代码&#xff09;的、动态数据类型的高级程序设计语言。对于所谓的高级程序设计语言&#xff0c;你可以理解为“同声传译”的过程。 2、Python标准库很庞大&am…

Shut down, sleep, or hibernate your PC 关闭、睡眠或休眠

最近一段时间没有整服务器了~自己开始捉摸18年买的笔记本-x280&#xff0c;除了发现usb type c和thunderbolt 3接口的不一样外&#xff0c;也开始研究这个待机的功能了~找了官方文档&#xff0c;做个简易的翻译&#xff0c;给大家一起看看学习把。 官方文档URL&#xff1a; S…

Docker搭建LNMP环境实战(02):Win10下安装VMware

实战开始&#xff0c;先安装 VMware 虚拟机。话不多说&#xff0c;上手就干&#xff01; 1、基本环境检查 1.1、本机Bios是否支持虚拟化 进入&#xff1a;任务管理器- 性能&#xff0c;查看“虚拟化”是否启用&#xff0c;如果已启用&#xff0c;则满足要求&#xff0c;如果未…

【Swagger】接口文档生成

文章目录 一、前后端分离开发流程二、YApi导入接口文档三、Swagger3.1 介绍3.2 使用步骤3.2.1 导入 knife4j 的maven依赖3.2.2 在配置类中加入 knife4j 相关配置3.2.3 配置类中设置静态资源映射3.2.4 访问测试 3.3 常用注解3.4 全局参数设置 四、YApi 与 Swagger 一、前后端分离…

Day18:LeedCode 513.找树左下角的值 112. 路径总和 106.从中序与后序遍历序列构造二叉树

513. 找树左下角的值 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1 思路:出该二叉树的 最底层 最左边 节点的值找出深度最大的第一个结点(左结点先遍历) 方法一…

一个单生产-多消费模式下无锁方案(ygluu/卢益贵)

一个单生产-多消费模式下无锁方案 ygluu/卢益贵 关键词&#xff1a;生产者-消费者模型、无锁队列、golang、RWMutex 本文介绍一个“单生产(低频)-多消费”模式下的无锁哈希类方案&#xff0c;这个方案的性能优于golang的RWMutex&#xff0c;因为它永远不会因为“写”而导致与…

i2c-tools基本用法

一. 前言 前面调试一个I2C设备&#xff0c;用到了i2c-tools&#xff0c;觉得是一个调试I2C不错的工具&#xff0c;本文对i2c-tools的基本用法做一些介绍。i2c-tools是一些控制2C接口工具的集合&#xff0c;其中包括i2cdetect&#xff0c;i2cdump&#xff0c;i2cget&#xff0c;…

亚稳态及其解决办法

异步电路 亚稳态 亚稳态亚稳态的产生原因什么是同步异步信号怎么消除亚稳态 亚稳态 在数字电路中&#xff0c;每一位数据不是1&#xff08;高电平&#xff09;就是0&#xff08;低电平&#xff09;。当然对于具体的电路来说&#xff0c;并非1&#xff08;高电平&#xff09;就是…

ECMAScript与JavaScript辨析:标准与实现之辨

ECMAScript与JavaScript辨析&#xff1a;标准与实现之辨 目录 ECMAScript与JavaScript辨析&#xff1a;标准与实现之辨 一、引言 二、ECMAScript&#xff1a;脚本编程语言的标准蓝图 三、JavaScript&#xff1a;基于ECMAScript的实现 四、ECMAScript与JavaScript的交互关系及…

Notepad++ 如何调整显示字面大小

在 Notepad 上&#xff0c;可以使用 ctrl 加上鼠标的左键来滚动来进行调整。 如何恢复默 可以使用 Ctrl 加数字键盘上的 / 键 来恢复默认设置。 当然也可以通过菜单栏上 view 菜单下的 Zoom 选项。 上面的界面中可以看到我们的在 Notepad 中使用的选项。 Notepad 如何调整显示…

redis 如何保证数据同步(数据变化时)

redis 如何保证数据同步&#xff08;数据变化时&#xff09; 思路 1.新增、删除和修改都先对数据库进行操作&#xff0c;这时数据库的数据将域缓存中数据不同。 2.数据库进行变动后&#xff0c;返回结果&#xff0c;根据返回的结果判断数据库操作是否成功。 3.如果数据库操…

C++和Python计算金融数学方程算法模型

要点 C代码蒙特卡罗模拟金融产品估值&#xff0c;开发C并行计算模拟库。 算法伴随微分计算图及C代码实现释义&#xff1a;C应用经典的复合模式构建有向无环图&#xff0c;遍历有向无环图节点C实现&#xff0c;C使用懒惰评估计算次序&#xff0c;遍历代码实现&#xff0c;C代码…

图论复习(最短路、最小生成树)

图论复习 拓扑排序 原题链接&#xff1a;AcWing 848. 有向图的拓扑序列 - AcWing 在建图时&#xff0c;记录每个节点的入度&#xff0c;首先把入度为0的点都存到队列里。 然后在搜索时&#xff0c;每搜到一个点&#xff0c;就把这个点的入度 -1 &#xff0c;当它的入度变为…

Flutter开发进阶之瞧瞧BuildOwner

Flutter开发进阶之瞧瞧BuildOwner 上回说到关于Element Tree的构建还缺最后一块拼图&#xff0c;build的重要过程中会调用_element!.markNeedsBuild();&#xff0c;而markNeedsBuild会调用owner!.scheduleBuildFor(this);。 在Flutter框架中&#xff0c;BuildOwner负责管理构建…

计算机视觉之三维重建(2)---摄像机标定

文章目录 一、回顾线代1.1 线性方程组的解1.2 齐次线性方程组的解 二、透镜摄像机的标定2.1 标定过程2.2 提取摄像机参数2.3 参数总结 三、径向畸变的摄像机标定3.1 建模3.2 求解 四、变换4.1 2D平面上的欧式变换4.2 2D平面上的相似变换和仿射变换4.3 2D平面上的透射变换4.4 3D…

使用 VMWare 安装 Android-x86 系统(小白版)

文章目录 VMWare 介绍Android 系统介绍概述最终效果前置步骤开始安装 VMWare 介绍 VMware Workstation是VMware公司开发的一款桌面虚拟化软件。它允许用户在一台物理计算机上同时运行多个操作系统&#xff0c;每个操作系统都在自己的虚拟机中运行。这使得用户可以在同一台计算…

实例:NX二次开发使用链表进行拉伸功能(链表相关功能练习)

一、概述 在进行批量操作时经常会利用链表进行存放相应特征的TAG值&#xff0c;以便后续操作&#xff0c;最常见的就是拉伸功能。这里我们以拉伸功能为例子进行说明。 二、常用链表相关函数 UF_MODL_create_list 创建一个链表&#xff0c;并返回链表的头指针。…

认识String类

认识String类 前面我们学习了类和对象&#xff0c;这一小节咱们来谈String类 目录 认识String类前言一、String类的创建方式二、String引用类型的特点及方法1.存储内容2.String对象的比较3.字符串查找在这里插入图片描述4.转换&#xff08;一&#xff09;数字转为为字符串&…

阿里云原生:如何熟悉一个系统

原文地址:https://mp.weixin.qq.com/s/J8eK-qRMkmHEQZ_dVts9aQ?poc_tokenHMA-_mWjfcDmGVW6hXX1xEDDvuJPE3pL9-8uSlyY 导读&#xff1a;本文总结了熟悉系统主要分三部分&#xff1a;业务学习、技术学习、实战。每部分会梳理一些在学习过程中需要解答的问题&#xff0c;这些问题…

单片机MCU,MPU,SOC的工艺结构原理及选型参数总结

🏡《总目录》 目录 1,概述2,工作原理2.1,时钟系统2.2,存储器系统2.3,处理器2.4,输入输出系统3,结构特点3.1,中央处理器(CPU)3.2,存储器3.3,I/O端口3.4,定时器/计数器3.5,中断系统3.6,