python中dir()与__dict__属性的区别浅析

Python中dir()与__dict__属性的区别浅析

前言

在Python语言中,dir()和__dict__两个方法都可以获取一个对象的属性、方法等信息。本文将对这两个方法进行区别和比较分析。

dir()方法

dir()函数是Python自带的一个函数,它返回任意对象的属性和方法列表。在交互模式下,我们可以显示一个对象的所有属性和方法。例如,以下是使用dir()函数获取dict对象属性的代码示例:

>>> dict1 = {"a":1, "b":2}
>>> dir(dict1)
['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']

dir()函数一般用于获取一个对象可以使用的方法,而不是获取对象具体的属性值。

__dict__属性

__dict__属性是Python中内置的一个字典类型对象,它存储对象的属性。每个类的实例对象都有一个__dict__属性可以访问到,可以通过该属性查看和修改对象的属性。以下是使用对象的__dict__属性获取对象属性的代码示例:

>>> class Foo:
...     def __init__(self, a):
...         self.a = a
... 
>>> b = Foo(2)
>>> b.__dict__
{'a': 2}

__dict__属性还可以用于给对象动态添加属性或修改属性。例如,以下是使用__dict__属性向对象添加属性的代码示例:

>>> class Foo:
...     def __init__(self, a):
...         self.a = a
... 
>>> b = Foo(2)
>>> b.__dict__
{'a': 2}
>>> b.__dict__["b"] = 3
>>> b.__dict__
{'a': 2, 'b': 3}

区别和比较

在实际中,我们应该注意这两个方法的区别和使用场景。

  • dir()方法一般用于获取Python内置数据类型(如dict、list、tuple等)的方法,方便用户使用这些数据类型。
  • __dict__属性一般用于对象的属性存储和动态修改。

综上所述,dir()方法和__dict__属性的主要区别在于:

  • dir()用于获取一个对象的方法列表,而__dict__用于获取一个对象的属性。
  • dir()返回的是一个列表,包含了该对象可以使用的方法,而__dict__返回的是一个字典,包含了该对象的属性和属性值。

示例

下面是使用dir()和__dict__两个方法的另一个示例:

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

    def say_hello(self):
        print("Hello!")

person = Person("Tom", 20)

# 使用dir()获取Person类属性和方法
print("dir(Person)", dir(Person))

# 使用dir()获取person对象属性和方法
print("dir(person)", dir(person))

# 使用__dict__获取对象属性
print("person.__dict__", person.__dict__)

# 使用__dict__添加和修改person对象属性
person.__dict__["school"] = "ABC University"
person.__dict__["age"] = 21

# 使用__dict__获取修改后的person对象属性
print("person.__dict__", person.__dict__)

输出结果如下:

dir(Person) ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'say_hello']

dir(person) ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'age', 'name', 'say_hello']

person.__dict__ {'name': 'Tom', 'age': 20}

person.__dict__ {'name': 'Tom', 'age': 21, 'school': 'ABC University'}

在这个示例中,我们可以看到:

  • 使用dir()函数获取Person类的属性和方法列表,包括类的属性和方法。
  • 使用dir()函数获取person对象的属性和方法列表,包括对象自身的属性和方法和继承的属性和方法。
  • 使用__dict__属性获取person对象的属性。
  • 使用__dict__属性给person对象动态添加新属性和修改属性,并使用__dict__属性获取修改后的属性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python中dir()与__dict__属性的区别浅析 - Python技术站

(0)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • Pandas 内置的十种画图方法

    当使用 Pandas 进行数据分析时,绘制图表是非常重要的一环。Pandas 提供了十种内置的画图方法,分别是:线图、面积图、柱状图、条形图、散点图、饼图、盒图、密度图、Hexbin 图和气泡图。 下面我们将对每种画图方法进行详细讲解,并且示范两个实例: 一、线图 直线图最常用于表示随时间变化的趋势。在 Pandas 中,可以使用 plot() 函数绘制线图…

    python 2023年5月19日
    00
  • 已解决卸载pip重新安装的方法

    关于“已解决卸载pip重新安装的方法”的完整攻略,可以分为以下几个步骤: 卸载旧版本的pip 可以使用以下命令卸载旧版本的pip: python -m pip uninstall pip 如果你使用的是Linux或macOS操作系统,则需要在命令前加上sudo来获取管理员权限,如下所示: sudo python -m pip uninstall pip 下载…

    python 2023年5月14日
    00
  • 用 Python 定义 Schema 并生成 Parquet 文件详情

    下面是使用 Python 定义 Schema 并生成 Parquet 文件的攻略: 什么是 Schema? 在计算机科学中,Schema 通常指数据库中表或文档存储的结构定义,它描述了数据的存储方式、类型、键值对等信息。 在 Parquet 文件中,Schema 则描述了文件的列名、数据类型、编码方式等信息。Parquet 文件用于存储海量的结构化数据,例如…

    python 2023年6月3日
    00
  • 关于Python操作Excel的基本方法

    下面我就给你介绍下关于Python操作Excel的基本方法的实例教程。 1. 安装所需模块 Python没有内置的Excel库,所以需要使用第三方模块来操作Excel表格。其中比较常用的有openpyxl、xlrd、xlwt、xlutils等模块。 在下面的实例中,我们将使用openpyxl模块来进行操作。 你可以使用pip安装它:pip install o…

    python 2023年5月13日
    00
  • Python使用selenium实现网页用户名 密码 验证码自动登录功能

    下面是详细的攻略,包含两个示例说明。 Python使用selenium实现网页自动登录 在这个教程中,我们将学习如何使用Selenium库来编写Python代码,以实现自动化登录网页功能。 前置条件 首先你需要安装Python和Selenium,可以使用以下命令来安装: pip install selenium 其次,你需要下载ChromeDriver并添加…

    python 2023年5月19日
    00
  • Python help()函数用法详解

    Python help()函数用法详解 简介 Python中内置的help()函数是一个很有用的工具,它可以提供对象的帮助文档,包括对象的方法和属性。当你在开发Python程序时,很有可能需要查看某个函数、模块或类的文档,这个时候就可以使用help()函数来获取这些信息。 用法 help()函数的使用非常简单,只需要将要查看帮助文档的对象作为参数传递给hel…

    python 2023年6月5日
    00
  • 一个计算身份证号码校验位的Python小程序

    下面是一个计算身份证号码校验位的Python小程序的完整攻略。 1. 分析问题 问题描述:给定一个18位身份证号码的前17位数字,计算第18位校验位。 对于身份证的校验位计算方法,可以参考以下规律: 身份证校验位是由前17位数字计算得出的,其位数在18个数字中的位置是最后一位。 计算校验位的算法是将前17位数字按照权重(即因子)相乘并相加,所得的结果除以11…

    python 2023年5月23日
    00
  • python简单猜数游戏实例

    Python简单猜数游戏实例是一个非常基础的练手项目,适合初学者们锻炼自己的逻辑思维和对Python的掌握程度。下面就来详细讲解一下这个游戏的具体攻略。 游戏规则 在这个游戏中,程序会生成一个1-100之间的随机数,玩家需要通过输入数字的方式来猜出这个随机数。每次猜测都会告知玩家猜测的数字是偏大还是偏小,玩家可以通过这些提示来逐步缩小猜测范围,直到猜测到正确…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部