python 自省

数据在Python中是指程序中存储、操作和处理的信息。数据可以是数字、字符串、布尔值等不同类型,而且可以通过变量来进行标识。

自省是一种特性,意味着能够访问和修改对象本身的属性和方法。在Python中,可以使用dir()函数查看一个对象具有哪些属性和方法,并使用type()函数查看对象类型。

举例来说,假设你正在编写一个计算机程序来管理家庭预算。你需要存储每月花费的金额以及来自不同来源(例如债务、租金、水电费等)的收入。这些数值数据可以存储在Python中的变量中。

另一方面,自省的概念可以通过考虑如何查看和修改您的预算数据来解释。例如,您可以编写一个函数,可用于确定某个月份的总支出或总收入。同时,如果您想要更改特定月份的支出或收入数据,您可能会使用Python内置的getattr()和setattr()函数,以便从对象中读取或设置属性。

>>> dir(users[1])
['__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__', '__reversed__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']

这将返回一个包含所有属性和方法名称的列表。在这个列表中,你可以看到 'age' 是 Bob 字典对象的一个属性。

现在,假设你想要更新 Charlie 的电子邮件地址。你可以使用自省的方法来修改字典对象的属性值。在 Python 中,你可以使用 setattr() 函数来设置一个对象的属性。例如:

setattr(users[2], 'email', 'charlie@example.org')

这将更新 users[2] 字典中的 'email' 属性为 'charlie@example.org'

以下是一个简单的 Python 代码示例,说明如何使用自省的概念:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        
    def say_hello(self):
        print(f"Hi, my name is {self.name} and I'm {self.age} years old.")
        
person = Person("Alice", 25)

在这个例子中,我们定义了一个 Person 类,该类有两个属性(nameage)和一个方法(say_hello())。我们还创建了一个名为 personPerson 对象。

现在,假设我们要查看 person 对象的属性和方法。我们可以使用 Python 内置的 dir() 函数。例如,在交互式解释器中运行以下命令:

>>> 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 对象具有 nameagesay_hello 等属性以及一些特殊的内置方法(例如 __init____str__)。

另外,如果我们想要查看 person 对象的某个属性的值,我们可以使用 Python 内置的 getattr() 函数。例如,下面的代码将打印 person 对象的 name 属性:

print(getattr(person, 'name'))

输出:

Alice

反,如果我们想要修改 person 对象的某个属性的值,我们可以使用 Python 内置的 setattr() 函数。例如,下面的代码将将 person 对象的 age 属性的值更改为 30

setattr(person, 'age', 30)

现在,如果我们再调用 person.say_hello() 方法,它将打印出以下内容:

Hi, my name is Alice and I'm 30 years old.

总的来说,在 Python 编程中,自省是一种非常有用的概念,可以帮助你更轻松地处理数据并快速访问和修改对象的属性和方法。

posted @ 2023-05-10 14:58  乐瓜乐虫  阅读(55)  评论(0)    收藏  举报