首页 > 编程语言 >Python面向对象之反射

Python面向对象之反射

时间:2024-01-12 21:46:22浏览次数:23  
标签:反射 name person Python self 面向对象 print age 属性

【一】反射

【1】什么是反射

  • 反射是一种程序可以访问、检测和修改其本身状态或行为的能力。
  • 在 Python 中,反射主要指通过字符串的形式操作对象的属性。

【2】Python中的反射

  • 通过字符串的形式操作对象相关的属性。
  • python中的一切事物都是对象(都可以使用反射)

【二】反射方法

反射方法介绍

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

    def run(self):
        print("跑步")


person = Person('tom', 18)

hasattr(object, name)

  • 判断对象是否具有指定属性
# 获取到对象中的指定属性,如果存在,就返回 True
print(hasattr(person, 'name'))  # True
print(hasattr(person, 'run'))  # True

# 获取到对象中的指定属性,如果不存在,就返回 False
print(hasattr(person, 'sex'))  # False

getattr(object, name[, default])

  • 获取对象的属性值,如果属性不存在,可提供默认值。
# 获取到对象中的值,如果存在则返回当前值
print(getattr(person,'name'))
# 获取对象中的值,如果不存在则报错
print(getattr(person,'sex'))
# 获取对象中的值,如果不存在则报错,但是可以指定不存在的时候返回的默认值
print(getattr(person,'sex',None))
# 如果获取的是对象中的函数,那会直接返回函数的内存地址,可以直接调用该函数
res = getattr(person,'run')

setattr(object, name, value)

  • 设置对象的属性值
def eat():
    print("吃饭")

# 设置方法
setattr(person, 'eat', eat)
# 获取方法
print(getattr(person, 'eat'))  # <function eat at 0x0000028550C57DC0>
# 使用方法
person.eat()  # 吃饭

delattr(object, name)

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

    def run(self):
        print("跑步")
        
per = Person('tom') 
  • 如果是类,可以删除自己的数据属性和函数属性
delattr(Person, 'name')
delattr(Person, 'run')
  • 如果是对象,只能删除自己的 数据属性

  • 删除类中的数据属性,不能删除对象中的父类中的数据属性

delattr(per, 'name') # 报错
delattr(per, 'age')
delattr(per, 'run') # 报错

标签:反射,name,person,Python,self,面向对象,print,age,属性
From: https://www.cnblogs.com/unrealqcc/p/17961651

相关文章

  • Python面向对象之派生
    派生【一】概要"派生"(Derivation)是指在面向对象编程中,通过创建新的类,基于已有的类(通常称为父类或基类)来构建新的类,以获取和扩展父类的属性和方法。在这个过程中,新创建的类称为子类或派生类。通俗来讲,派生是指,子类继承父类,派生出自己的属性与方法,并且重用父类的属性与方法【......
  • 面向对象的三大特性及派生和组合
    面向对象的三大特性面向对象编程有三大特性:封装、继承、多态-->派生和组合【一】封装【1】什么是封装在程序设计中,封装(Encapsulation)是对具体对象的一种抽象封装就是对具体对象的一种抽象简单理解就是将不想让别人看到的东西全部藏起来【2】为什么要封装封装数......
  • Python六个标准的数据类型
    Python3中有六个标准的数据类型,分别是:数字、字符串、列表、元组、集合、字典。1、Number(数字)Python中的数字有四种类型:整数、布尔型、浮点数和复数。int(整数),例如1、2、3。bool(布尔型),包括True和False两个值,分别代表真和假。举个例子:张三是不是男生?答案要么是真,要么是假。你只......
  • [oeasy]python0004_游乐场_和python一起玩耍_python解释器_数学运算
    和python玩耍......
  • python中进度条组件tqdm使用
    有的时候我们需要记录相关的执行过程,在整个过程中如果使用到了进度条,就更直观看到运行的现状。比如一下代码:importtimeif__name__=="__main__":#dosomething,进度为30time.sleep(1)print("执行了30%")#doanotherthing,进度为20time.slee......
  • Python使用Matplotlib包绘制x方的积分函数图像
    Matplotlib是一个常用的Python绘图库,可以用于创建各种类型的图表和可视化。本文将介绍如何使用Matplotlib包在Python中绘制x方的积分函数图像。步骤:以下是使用Matplotlib包绘制x方的积分函数图像的步骤:1.导入所需的库。2.定义要绘制的函数。3.创建一个表示x轴范围的数组。4.计算函......
  • Python中有哪些常用的工具可以用于接口自动化
    接口自动化测试是测试的重要一部分,Python作为一种流行的编程语言,提供了许多用于接口自动化测试的工具。本文将介绍一些常用的Python工具,用于接口自动化测试。1.RequestsRequests是一个Python库,用于发送HTTP请求和处理响应。它提供了一种简单而优雅的方式来发送HTTP/1.1请求,并自动处......
  • Python模块安装的前提条件及步骤详解
    Python是一种功能强大的编程语言,拥有丰富的第三方模块库。在使用这些模块之前,我们需要满足一些前提条件才能进行安装。本文将介绍Python模块安装的前提条件以及详细的安装步骤。前提条件:在安装Python模块之前,需要满足以下前提条件:1.Python解释器:确保已经正确安装了Python解释器,并且......
  • Python多线程的限制与使用场景探讨
     Python是一种流行的编程语言,具有内置的多线程支持。然而,由于Python的全局解释器锁(GIL)机制等因素的存在,有人认为Python的多线程在某些情况下可能没有明显的性能优势。本文将探讨Python多线程的限制以及适用的使用场景。 1.GIL对多线程的影响 全局解释器锁(GIL)是Python解释器的......
  • python-函数进阶:函数返回多个返回值,lambda匿名函数
    如果一个函数要有多个返回值,要怎么书写呢?deftest_return():return1,2x,y= test_return()按照返回值的顺序,写对应顺序的多个变量接收即可变量之间用逗号隔开支持不同数据类型的return  匿名函数匿名函数使用lambda关键字进行定义定义语法:lambda传入参数:函数......