Python类的反射实例
打开python开发工具IDLE
在编写Python代码之前,我们首先需要打开一个Python开发工具。IDLE是Python自带的一个简单的集成开发环境(IDE),可以方便地编写和运行Python代码。在IDLE中新建一个名为""的文件,并将以下代码复制到文件中:
```python
class Test():
def __init__(self, name):
self._name name
def test1(self):
print('test1')
t1 Test('hello')
print(globals())
```
利用globals()函数实现反射
在上述代码中,我们定义了一个Test类,并创建了一个t1对象。接下来,我们可以使用`globals()`函数来实现反射。通过`globals()`函数,我们可以获取全局变量的字典,其中包含我们定义的Test类和t1对象。
```python
clz 'Test'
fn 'test1'
t2 globals()[clz]('world')
fun getattr(t2, fn)
fun()
```
通过类名的key,我们可以定位到类的地址,然后实例化一个t2对象。再利用`getattr()`函数,我们可以获取对象的方法并调用。
直接使用getattr方法
除了上述步骤,我们还可以直接在创建对象后使用`getattr()`方法来调用对象的方法。
```python
class Test():
def __init__(self, name):
self._name name
def test1(self):
print('test1')
t1 Test('hello')
f1 getattr(t1, 'test1')
f1()
clz 'Test'
fn 'test1'
t2 globals()[clz]('world')
fun getattr(t2, fn)
fun()
```
通过上述代码,我们可以看到对象t1也可以调用test1()方法。
判断函数是否存在
在使用反射时,有时我们需要判断一个类是否拥有某个方法。可以使用`hasattr()`方法来判断函数是否存在。
```python
class Test():
def __init__(self, name):
self._name name
def test1(self):
print('test1')
t1 Test('hello')
print(hasattr(t1, 'test1'))
f1 getattr(t1, 'test1')
f1()
clz 'Test'
fn 'test1'
t2 globals()[clz]('world')
fun getattr(t2, fn)
fun()
```
通过以上代码,我们可以看到输出结果为True,表示类Test存在test1()方法。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。