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

举报
frica01 发表于 2024/01/22 10:14:00 2024/01/22
【摘要】 在 Python 的世界里,理解和操作对象的属性是一项基础且重要的技能。掌握如何使用 Python 的内置函数来操作对象属性将大大提高编程效率。

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 编程中不可或缺的工具。善于使用它们,有助于提升编程水平。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。