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日

相关文章

  • 如何在 Python 中创建自己的“参数化”类型(如 `Optional[T]`)?

    【问题标题】:How can I create my own “parameterized” type in Python (like `Optional[T]`)?如何在 Python 中创建自己的“参数化”类型(如 `Optional[T]`)? 【发布时间】:2023-04-03 12:47:02 【问题描述】: 我想在 Python 中创建自己的参数…

    Python开发 2023年4月8日
    00
  • python爬取拉勾网职位数据的方法

    Python爬取拉勾网职位数据的方法 1. 分析目标网站 在爬取拉勾网职位数据之前,我们需要先分析目标网站,了解它的结构和规律,以便我们编写代码正确地抓取数据。 拉勾网的职位数据是通过Ajax动态加载的,因此我们需要先通过浏览器开发者工具查看职位搜索时的Ajax请求,并进行分析。 例如,在搜索Python职位时,我们会发现请求的url为 https://ww…

    python 2023年6月6日
    00
  • 如何使用 Python Redis 库的 Pub/Sub 功能?

    如何使用 Python Redis库的Pub/Sub功能? Redis是一种高性能的键值存储数据库,支持多种数据结构和功能。其中,Pub/Sub功能是Redis的一个重要特性,可以用于实现消息传递和事件通知等功能。在本文中,我们将介绍如何使用Python Redis库的Pub/Sub功能的完整使用攻略,包括创建发布者和订阅者、发布和订阅消息等操作。 步骤1:…

    python 2023年5月12日
    00
  • python中函数返回多个结果的实例方法

    下面就是Python中函数返回多个结果的实例方法的详细攻略。 函数返回多个结果的原理 Python中的函数可以返回多个值,这是通过将多个值封装成一个元组(tuple)的形式进行返回的。具体的实现方法需要在函数中使用,或return来表示多个返回值。 实例方法1 – 返回元组 下面是一个示范函数,它接受两个参数,把这两个参数相加并返回它们的和、差和乘积: de…

    python 2023年6月3日
    00
  • python保存两位小数的多种方法汇总

    下面是Python保存两位小数的多种方法汇总的完整攻略。 方法一:使用round函数 在Python中,可以使用round()函数将一个浮点数保留指定的位数。这个函数需要两个参数,第一个参数是需要保留的浮点数,第二个参数是需要保留的小数位数。 num = 1.235678 result = round(num, 2) print(result) # 1.24…

    python 2023年6月3日
    00
  • Python使用defaultdict读取文件各列的方法

    下面是Python使用defaultdict读取文件各列的方法的完整攻略。 什么是defaultdict? 在开始介绍defaultdict读取文件各列的方法之前,我们先来简单介绍一下defaultdict这个内置模块。 defaultdict是Python中的一个类,它继承了Python内置的字典(dict)类,但是在使用过程中有一定的优点,就是当访问一个…

    python 2023年6月3日
    00
  • Python发送邮件实现基础解析

    在Python中,可以使用smtplib和email模块来发送邮件。smtplib模块提供了SMTP协议的客户端实现,email模块提供了邮件的构建和解析功能。以下是详细的攻略,介绍如何使用Python发送邮件: 发送纯文本邮件 可以使用email和smtplib模块发送纯文本邮件。以下是一个示例,演示如何使用Python发送纯文本邮件: import sm…

    python 2023年5月14日
    00
  • Python3 实现爬取网站下所有URL方式

    下面将为您详细讲解“Python3 实现爬取网站下所有URL方式”的完整攻略。 1. 确定爬取目标 首先,需要明确爬取的目标网站。在确定网站之后,需要了解网站的结构、页面数量、页面内容等信息,以便在后续爬取过程中做好相应的准备。 2. 获取网页内容 使用requests库可以方便地获取网页内容。通过向目标网站发送HTTP请求,获取网站返回的HTML文档。示例…

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