python是一个脚本语言,它不象java一样有一个专门的包来处理反射。以 下是我们来看看python是怎么做到类似java一样的反射功能的。我在网上搜了一下,因为在网上没有很明确的文章说要怎么做,所以,我写了这篇,希望 新手不要向我一样走弯路,因为是新手,所以,我在这里没能考虑到异常的处理。
-、动态加载类
说到动态的加载类,那就不得不说,动态的加态模块。因为只能成功的加模了模块才能加载到类。我们可以用,以下的代码来动态的加载类
- #modulePath是模块文件的路径+模块的文件名。
- aMod = sys.modules[modulePath]
当我们动态的加载了这个模块后,我们就可以从这个模块中取得你要的类了,感觉上这个方法有点像java中从类中反射出方法。下以的代码可以
Python代码
aClass= getattr(aMod, className)
二、动态实例化类
得到了class对象之后,在python就可以很方便的得到他的对像,以下这代码
Python代码 obj = new.instance(aClass)
三、得到对象、类或模块中的所有属性方法
在java的反射中我们可以得到对象中的所有属性和方法,在python中,因为是脚本语言,所以我们要得到这个些属性方法更加的方便,我们可以用以下的代码获得类,对象,模块中的所有的属性的名称
我们得到这些属性的名称后,可以用上面得到class 的方法来获得这个对象里的所有属性
四、动态运行方法
动态的运行方法,我们也非常的方便,因为python是脚本语言,感觉起来很象javascript的方式来调用方法。
Python代码
apply(objFunc,arrArgs)
代码中objFunc是用getAttr从实例化后的对象中取得到function,而arrArgs是我们的参数,和javascript一样,他是数组一样的对象。
有了这些方法,我们就可以做和java反射一样做的事了,我在网上找到了一个模块,小改了一下,使得用这个模块可以很方便的用类名实例化一个实例和运行这个实例中的方法,如果大家需要可以down下来看看
参考地址:http://www.chainlt.com/?p=686
分享到:
相关推荐
可以通过多种方式获取一个类的`Class`对象,如`Class.forName()`方法或对象的`getClass()`方法。 - **Method**:表示一个方法,通过它可以获取方法的详细信息,如名称、返回类型、参数列表等,并可以通过`invoke()`...
dragger = driver.find_elements_by_class_name("slide-to-unlock-handle")[0] ``` 为了模拟滑动,我们需要先点击并保持滑块,这可以通过`ActionChains`的`click_and_hold`方法实现: ```python action = ...
- **动态加载类**:在运行时通过类名获取`Class`对象,使用`Class.forName()`方法。 - **获取类信息**:通过`Class`对象可以获取类的修饰符、超类、实现的接口、字段和方法的详细信息。 - **创建对象**:使用`Class....
此外,也可以使用`Class.forName(String className)`静态方法,传入类的全名(包括包名)来获取Class对象。 反射API主要包括以下部分: 1. **java.lang.reflect.Field**:代表类的字段。可以获取字段的类型、访问...
### Selenium Python Bindings 第二版概述 #### 一、安装指南 **1.1 引言** Selenium Python bindings 提供了一个简洁的 API 来控制 Selenium WebDriver 的操作。WebDriver 是一个独立的应用程序,用于与浏览器...
- **不可变对象 vs 可变对象**: 在 Python 中,参数传递遵循“引用传递”的原则,但根据对象是否可变,实际效果有所不同。对于不可变对象如数字、字符串、元组等,即使在函数内部对其进行了赋值操作,也不会改变原始...
- 类(class)定义:使用`class`关键字,类名首字母大写,类体中定义方法(属性和行为)。 - 对象实例化:通过`object_name = ClassName(parameters)`创建对象。 - 继承(inheritance):一个类可以继承另一个类...
它们可以通过类名或实例名访问。 - **实例变量**:在类的实例方法中声明的变量,每个实例都有自己的副本,彼此独立。 **示例**: ```python class MyClass: class_var = "I am a class variable." def __init__...
42. 获取实例的类名可以使用内置的type()函数或者__class__属性。 43. 字典推导式允许快速生成字典,例如{key: value for key, value in iterable}。 44. 反转字符串可以直接使用切片语法,例如s[::-1]。 45. ...
类似于C语言中的结构体,我们可以为每个元素的位置定义一个常量,如`Name = 0`,`Gender = 1`等。但这种方式在Python中并不理想,因为常量并不提供性能提升。更好的做法是利用列表拆包,如`Name, Gender, Age, Emil ...
此外,Python解释器支持交互式环境,使得开发者可以直接在命令行中输入Python代码并查看执行结果,这有助于快速实验和学习新的概念。 #### 三、Python基本使用 - **Python作为计算器**:Python可以直接作为计算器...
在Python中,通过定义类(Class)来创建对象。 2. **设计Circle类** - `Circle` 类是用来表示圆的,它应包含两个属性:半径(radius)和两个方法:求面积(area)和求周长(circumference)。 - 面积公式是π * ...
Class<?> clazz = Class.forName(className); return clazz.getDeclaredConstructor().newInstance(); } } ``` 在这个例子中,`createInstance`方法使用了`Class.forName`来加载类,然后通过`...
创建类的实例称为实例化,通过调用类名并传递参数给构造函数实现。例如: ```python my_object = ClassName("Value1", "Value2") ``` `my_object`现在是一个`ClassName`类的实例,拥有与类定义中相同的属性和方法...
变量赋值时无需声明数据类型,Python会根据赋值内容自动推断。 #### 运算符 - **算术运算符**:如`+-*/%`,分别代表加、减、乘、除和取模运算。 - **比较运算符**:如`==!=<><=>=`,用于比较两个值是否相等或满足...
在Python编程面试中,经常会遇到各种类型的题目,包括基础理论问题和实际编程挑战。以下是对提供的面试题目的详细解析: 1. **具名元组(namedtuple)**: - `namedtuple` 是 Python `collections` 模块中的一个...
items = browser.find_elements_by_class_name('item') # 打印每个元素的文本 for item in items: print(item.text) # 关闭浏览器 browser.quit() ``` 通过这个项目,你可以掌握Selenium的基本操作,如启动...
new_attr[name.upper()] = value return type(class_name, class_parents, new_attr) class Foo(object, metaclass=upper_attr): bar = 'bip' ``` 通过定义并使用`upper_attr`作为Foo类的元类,Python在创建类时...
根据提供的信息,《Python基础教程第二版》主要针对Python编程的基础知识进行系统讲解。下面将对这一主题进行深入探讨,涵盖Python的基本概念、安装配置、基本语法、数据类型、流程控制语句、函数定义与调用、面向...
- **实例化**:使用类名加上括号创建对象。 - **方法**:类中的函数,第一个参数通常是 `self`。 - **属性**:类中的变量。 **示例**: ```python class Student: def __init__(self, name, score): self.name = ...