首页 > 其他分享 >反射

反射

时间:2024-01-05 19:35:22浏览次数:19  
标签:__ 反射 Heart self heart age 属性

反射

  • 在 Python 中,反射是指在运行时获取对象的信息,包括对象的属性和方法,以及动态地操作这些属性和方法。在面向对象编程中,反射允许你在运行时检查类和对象的信息,而不是在编写代码时硬编码这些信息。

(1)获取对象属性值和方法/调用getattr()

  • 使用 getattr() 函数可以获取对象的属性值。
class Heart:
    def __init__(self):
        self.age = 18

heart=Heart()
age = getattr(heart, 'age')
print(age)  # 输出: 18
  • 使用 getattr() 函数可以获取对象的方法。
class Heart:
    def talk(self):
        return f'说话'


heart = Heart()
method = getattr(heart, 'talk')
result = method()
print(result)  # 输出: 说话
  • 使用 getattr() 函数获取方法,然后直接调用。
class Heart:
    def talk(self):
        return "说话"


heart = Heart()
method = getattr(heart, 'talk')
result = method()
print(result)  # 输出: 说话

(2)设置对象的属性setattr()

  • 使用 setattr() 函数可以设置对象的属性值。
class Heart:
    def __init__(self):
        self.age = 18

heart = Heart()
setattr(heart, 'age', 100)
print(heart.age)  # 输出: 100

(3)检查对象是否有某个属性或方法hasattr()

  • 使用 hasattr() 函数可以检查对象是否具有指定的属性或方法。
class Heart:
    def __init__(self):
        self.age = 42

heart = Heart()
has = hasattr(heart, 'age')
print(has)  # 输出: True

has1 = hasattr(heart, 'name')
print(has1)  # 输出: False

(4)删除对象属性delattr()

  • 使用 delattr() 函数可以删除对象属性的内建函数。
class Heart:
    def __init__(self):
        self.age = 18

heart = Heart()

# 删除对象的属性
delattr(heart, 'age')

# 尝试访问已删除的属性会引发 AttributeError
# print(heart.age)

# 检查属性是否仍存在
has_attribute = hasattr(heart, 'age')
print(has_attribute)  # 输出: False

标签:__,反射,Heart,self,heart,age,属性
From: https://www.cnblogs.com/ssrheart/p/17947908

相关文章

  • python面向对象之派生、组合、抽象类、反射
    【派生】在子类派生的新方法中如何重用父类的功能?  【组合】(定义) (案例) (组合和继承的区别) 【抽象类】(定义) (案例) 实例化 (总结) 【反射】什么是反射 如何反射 实现反射机制的步骤 解决办法 ......
  • 【反射】反射获取私有字段小记
    问题://直接按类字面量获取Class<?>myClass=ClassTestA.class;//全类名反射获取Class<?>myClass=Class.forName("com.cambrianwenjie.demo.ClassTestA");//获取私有字段FieldprivateField=myClass.getDeclaredField("name");//设置私有字段可访问priva......
  • Java反射,看完就会用
    什么是反射在说反射概念之前,我们先说另外2个概念:编译期和运行期。编译期:编译期是源代码从文本形式转换为字节码的过程,这发生在Java代码被JVM执行之前。在编译期,编译器对源代码进行语法检查、类型检查、变量名解析等操作,确保代码符合Java的语法规则,并将其编译成字节码(.class文......
  • Java反射
    一、获取Class对象1、调用运行时类的.class属性ClassstuClass=Student.class;2、调用运行时类的getClass方法Students=newStudent();ClassstuClass=s.getClass();3、调用Class类的静态方法:forName(StringclassPath)【该种方法用的多】ClassstuClass=Clas......
  • 【类型转换】使用c#实现简易的类型转换(Emit,Expression,反射)
    引言哈喽。大家好,好久不见,最近遇到了一个场景,就是在FrameWork的asp.netmvc中,有个系统里面使用的是EntityFramework的框架,在这个框架里,提供了一个SqlQuery的方法,这个方法很好用啊,以至于在EFCORE8里面又添加了回来,不过不知道性能怎么样,我遇到的场景是通过SqlQuery查询的时......
  • 十九,反射
    //断言模式:10+10=30@TestpublicvoidtestAdd(){  Assert.assertEquals(20,newJiSuanQi().add(10,10));}  @Ignore//忽略该函数  @Test(timeout=3000)//单位:毫秒  publicvoidtestRun(){    //while(true){    //  ......
  • 反射
    公共函数的调用Class<A>clazz=A.class;通过反射创建对象获取函数对象try{Methodmethod=clazz.getMethod("m1");//形参类型Objecto=clazz.newInstance();//JDK9中过时了调用空参函数Objectinvoke=method.invoke(o);//实参System.out.println("invo......
  • Java反射
    一、反射的概述JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。要想解剖一个类,必须先要获取到该类的字节码文件对象。而解......
  • 深入探讨Java反射:解析机制与应用场景
    当谈及Java编程语言的强大功能时,反射(Reflection)是一个不可忽视的特性。反射允许程序在运行时检查和操作其自身的结构,这为开发者提供了一种动态获取信息和执行操作的途径。在本篇博客中,我们将深入探讨Java反射的原理、用法以及一些实际场景中的应用。什么是反射?反射是Java的一种......
  • Java,反射创建对象的两种方式
    跟着孙哥学Spring,b站:https://www.bilibili.com/video/BV185411477k/?spm_id_from=333.337.search-card.all.click在Java中,我们可以使用反射来创建对象。这里有两种主要的方式:1.使用Class.forName().newInstance()方法这种方式是使用默认的无参数构造函数来创建对象。如果......