首页 > 编程语言 >python 自省

python 自省

时间:2023-05-10 15:13:36浏览次数:29  
标签:__ Python name python age person 自省 属性

数据在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', '[email protected]')

这将更新 users[2] 字典中的 'email' 属性为 '[email protected]'

以下是一个简单的 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 编程中,自省是一种非常有用的概念,可以帮助你更轻松地处理数据并快速访问和修改对象的属性和方法。

标签:__,Python,name,python,age,person,自省,属性
From: https://www.cnblogs.com/yund/p/17388013.html

相关文章

  • Python程序执行的流程控制(选择和循环)
    选择结构单分支if条件:语句块(注意要打冒号冒号冒号,用缩进代替大括号的功能)双分支if条件:语句块1else:语句块2多分支if条件1:语句块1elif条件2:语句块2……else:语句块n若有多个条件都满足,只执行第一个被满足条件......
  • python---测试过程中增加进度条
    前言我们再执行自动化测试时,或者调试时,自动化测试用例数量过多,不清楚目前用例数执行了多少个了,还差多少个执行完成,这时候就会猜想,如果执行过程中存在进度条,就很清楚的了解到测试用例的执行情况,今天小编通过下面两种方法简单介绍如何在自动化测试时加入进度条pytest-sugarpytest......
  • 正则表达式语法及其在python的应用
    一、语法参考:https://www.liujiangblog.com/course/python/731、普通字符:正则表达式中的普通字符在进行匹配的时候只会匹配与自身相同的一个字符。2、元字符:.小数点;|逻辑或;[]匹配字符集中的一个字符;[^]对字符集求反;-定义字符集中的字符区间;\对紧跟其后的一个字符进行转义;()对表......
  • mac下 nvm 安装 node 版本报错 python: not found
    mac下nvminstallv12.22.12时,始终限制安装失败,解决方案,做好以下两件事:将镜像源更换位淘宝镜像源将终端app右键显示简介,勾选rosetta重启终端即可参考 https://blog.csdn.net/xinshou_caizhu/article/details/128889858https://www.jianshu.com/p/2b47107e188a?utm......
  • Python 密码破解指南:15~19
    协议:CCBY-NC-SA4.0译者:飞龙本文来自【OpenDocCN饱和式翻译计划】,采用译后编辑(MTPE)流程来尽可能提升效率。收割SB的人会被SB们封神,试图唤醒SB的人是SB眼中的SB。——SB第三定律十五、破解仿射密码原文:https://inventwithpython.com/cracking/chapter15.html......
  • 007 python3写一个http接口服务(get, post),给别人调用
    一、python3写一个http接口服务,给别人调用3这次选择fastapi,FastAPI是一个现代的、快速(高性能)的web框架,用于基于标准Python类型提示使用Python3.6+构建api。具有快速、快速编码、更少的错误、直观、简单、简便、健壮。简易而且本地win10能够跑起来二、FastAPI的get接口代码实现......
  • Python 密码破解指南:0~4
    协议:CCBY-NC-SA4.0译者:飞龙本文来自【OpenDocCN饱和式翻译计划】,采用译后编辑(MTPE)流程来尽可能提升效率。收割SB的人会被SB们封神,试图唤醒SB的人是SB眼中的SB。——SB第三定律零、简介原文:https://inventwithpython.com/cracking/chapter0.html“我是无意......
  • python 报错:TypeError: only integer scalar arrays can be converted to a scalar in
    defconvolution(initial_img,kernal):img=np.zeros((initial_img.shape[0],initial_img.shape[1])).astype(np.uint8)forxinrange(1,initial_img.shape[0]-1):foryinrange(1,initial_img.shape[1]-1):temp=np.zeros([3,3......
  • python虚拟环境
    什么是虚拟环境Python虚拟环境是一个独立的Python开发环境,它包含自己的Python解释器、包和依赖项,可以与系统中的其他Python环境隔离开来。通过创建虚拟环境,您可以在不影响其他项目的情况下安装和管理特定于项目的依赖项和包。这对于在同一系统上运行多个Python项目或与其它开发人......
  • python记录
    1,要注意Python是区分大小写的2,此外,你需要确保每一行的第一个字符前面都没有任何空格或制表格3,运行help('len')命令——这将显示出有关len函数的帮助,小贴士:按下q键可以退出帮助4,按ctrl+z或quit()退出控制台运行5,注释是任何存在于#号右侧的文字6,数字主要分为......