【Python】对象属性操作详细指南?

发布时间:2024年01月19日

在这里插入图片描述

Python 对象属性操作详细指南?

前言

Python 的世界里,理解和操作对象的属性是一项基础且重要的技能。掌握如何使用 Python 的内置函数来操作对象属性将大大提高编程效率。本文旨在提供一个全面的指南,介绍如何使用 Python 中的几个关键内置函数来处理对象的属性,包括获取、设置、删除和检查属性的存在。让我们一起深入了解这些强大的工具吧!

知识点📖📖

涉及到属性操作的内置函数时,我总结了以下几个函数,它们的名称和作用如下:

  • 它们在 Python 中用于操作对象的属性和方法时有用。
函数名称作用
delattr(object, name)删除对象的指定属性。
getattr(object, name[, default])获取对象的属性值,如果属性不存在则返回默认值(可选)。
hasattr(object, name)检查对象是否具有指定的属性或方法,返回布尔值。
setattr(object, name, value)设置对象的属性值,如果属性不存在则创建它。
vars([object])返回对象的属性字典,或者当前作用域的命名空间。
dir([object])返回对象的属性和方法列表,或者当前作用域的名称列表。

对象类型📚

对象类型描述
类实例用于访问类实例的属性和方法。可以访问公共属性、私有属性和实例方法。
用于访问类本身的属性和方法。包括静态方法、类方法以及普通方法(需要类实例化后才能使用)。
模块用于访问模块中定义的函数、类和变量。
内置类型实例用于访问如列表、字典、字符串等内置类型实例的方法。例如,访问列表的 append 方法或字符串的 split 方法。
自定义对象用于访问任何具有属性或方法的自定义对象。这些对象可以是用户自定义的类实例。

代码实现💻

delattr🗑?

delattr 函数用于删除对象的属性。它的基本用法如下:

delattr(object, name)
  • object :要删除属性的对象。
  • name :要删除的属性名称

代码示例:

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


if __name__ == '__main__':
    person = Person("Alice", 30)

    # 使用 delattr 删除对象属性
    print('删除前 ==> ', person.__dict__)
    delattr(person, "name")

    # 删除的不存在的属性将引发 AttributeError 异常
    print('删除后 ==> ', person.__dict__)
    delattr(person, "name")

输出:

删除前 ==>  {'name': 'Alice', 'age': 30}
删除后 ==>  {'age': 30}
Traceback (most recent call last):
  File "F:\csdn\demo.py", line 16, in <module>
    delattr(person, "name")
AttributeError: name

getattr🔍

getattr 函数用于获取对象的属性值。它的基本用法如下:

getattr(object, name, default=None)
  • object :要获取属性的对象。
  • name :要获取的属性名称。
  • default(可选):如果属性不存在,则返回该默认值。

代码示例:

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


if __name__ == '__main__':
    person = Person("Alice", 30)

    # 使用 getattr 获取对象属性值
    name = getattr(person, "name")
    age = getattr(person, "age")
    # 使用默认值, 否则抛出 AttributeError 异常
    city = getattr(person, "city", "Unknown")  

    # 输出属性值
    print("Name:", name)
    print("Age:", age)
    print("City:", city)

输出:

Name: Alice
Age: 30
City: Unknown

hasattr🤔

hasattr 函数用于检查对象是否具有指定的属性或方法。

它的基本用法如下:

hasattr(object, name)
  • object :要检查的对象。
  • name :要检查的属性或方法名称。

代码示例:

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


if __name__ == '__main__':
    person = Person("Bob", 25)

    # 使用 hasattr 检查属性是否存在
    has_name = hasattr(person, "name")
    has_salary = hasattr(person, "salary")

    print("Has name:", has_name)  # True
    print("Has salary:", has_salary)  # False

输出:

Has name: True
Has salary: False

setattr🛠?

setattr 函数用于设置对象的属性值。如果属性不存在,它将创建一个新属性。

它的基本用法如下:

setattr(object, name, value)
  • object :要设置属性的对象。
  • name :要设置的属性名称。
  • value :要设置的属性值。

代码示例:

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


if __name__ == '__main__':
    person = Person("Eve")

    # 使用 setattr 设置新属性
    print('设置前 ==> ', person.__dict__)
    setattr(person, "age", 28)

    # 输出设置的属性
    print('设置后 ==> ', person.__dict__)

输出:

设置前 ==>  {'name': 'Eve'}
设置后 ==>  {'name': 'Eve', 'age': 28}

vars🗂?

vars 函数返回对象的 __dict__ 属性,即对象的属性字典。

如果没有参数,它返回当前作用域的命名空间。

vars([object])
  • object(可选):要返回属性字典的对象。

代码示例:

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


if __name__ == '__main__':
    person = Person("Alice", 30)

    # 使用 vars 获取对象属性字典
    person_vars = vars(person)

    print('Person ==> ', person_vars)
    print('当前作用域 ==> ', vars())

输出:

Person ==>  {'name': 'Alice', 'age': 30}
当前作用域 ==>  {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000022EFC8B7C70>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'F:\\csdn\\demo.py', '__cached__': None, 'Person': <class '__main__.Person'>, 'person': <__main__.Person object at 0x0000022EFC9D5390>, 'person_vars': {'name': 'Alice', 'age': 30}}

dir🔎

dir 函数用于返回对象的属性和方法列表。如果没有参数,它返回当前作用域中的名称列表。

dir([object])
  • object(可选):要列出属性和方法的对象。

代码示例:

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

    def say_hello(self):
        return "Hello!"


if __name__ == '__main__':
    person = Person("Bob")

    # 使用 dir 列出对象的属性和方法
    attributes = dir(person)

    print('attributes ==> ', attributes)
    print('当前作用域 ==> ', dir())

输出:

attributes ==>  ['__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__', 'name', 'say_hello']

当前作用域 ==>  ['Person', '__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'attributes', 'person']

总结📘

在本文中,我们详细探讨了 Python 中用于操作对象属性的几个内置函数:getattrsetattrdelattrhasattr、以及辅助函数 varsdir。通过具体的代码示例,我们展示了这些函数在不同对象类型上的应用,从类实例到自定义对象,再到模块和内置类型实例。无论是访问、修改、删除还是检查属性,这些内置函数都是 Python 编程中不可或缺的工具。善于使用它们,有助于提升编程水平。

文章来源:https://blog.csdn.net/weixin_45081575/article/details/135671624
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。