Python面向对象——反射

原创 2018年04月17日 16:30:10

1.什么是反射  

反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检修和修改它本身状态或行为的一种能力(自省)。这一概念的提出很快引发了计算科学领域关于应用反射性的研究。它率先被程序语言的设计领域所采用。

2.Python中面向对象中的反射:通过字符串的形式操作对象相关的属性,python中的一切皆对象(都可以使用反射)

3.可以实现自省的四个函数

举个例子:

class People:
    country="China"
    def __init__(self,name):
        self.name=name
    def tell(self):
        print('%s is good' %self.name)

obj=People('OMG')

'''
1、hasattr(object,name)
判断object中没有一个name字符串对应的方法和属性
'''
print(hasattr(People,'country'))
print('country' in People.__dict__)

print(hasattr(obj,'name'))
print(hasattr(obj,'country'))
print(hasattr(obj,'tell'))

'''
2、getattr(object,name,default=None)
'''
x=getattr(People,'country1',None)
print(x)

f=getattr(obj,'tell',None)#obj.tell
print(f == obj.tell)
f()
obj.tell()


'''
3、setattr(x,y,v)
'''
People.x=111
setattr(People,'x',111)
print(People.x)

obj.age=18
setattr(obj,"age",18)
print(obj.__dict__)

'''
4、delattr(x,y)
'''
del People.country
delattr(People,"country")
print(People.__dict__)

del obj.name
delattr(obj,"name")
print(obj.__dict__)





python基础-对象_类反射、模块反射

getattr 对象获取 类获取 setattr 设置类属性方法 设置对象属性方法 模块反射 反射本模块函数变量python面向对象中的反射:通过字符串的形式操作对象相关的属性。python中的一切事...
  • u013210620
  • u013210620
  • 2017-11-24 19:56:14
  • 378

面向对象思维之反射

原创:http://write.blog.csdn.net/mdeditor 都知道java是一门面向对象的语言,个人理解,例如用面向对象的思维去看程序,会发现程序模块是网站的,模块化的。 添加一...
  • prince77qiqiqq
  • prince77qiqiqq
  • 2016-05-15 00:07:26
  • 493

Java学习系列(二十)Java面向对象之反射详解

前言 今天讲讲Java中的反射。我们常见的反射多用于JDBC中的加载驱动程序Class.forName("com.mysql.jdbc.Driver");、Struts的MVC、Hibernate中的...
  • JAVE_LOVER
  • JAVE_LOVER
  • 2015-04-26 18:46:31
  • 1126

面向对象之反射

反射 python中的反射功能是由以下四个内置函数提供:hasattr、getattr、setattr、delattr,改四个函数分别用于对对象内部执行:检查是否含有某成员、获取成员、设置成员、删除...
  • wo_renfanzi
  • wo_renfanzi
  • 2016-06-13 17:09:49
  • 412

Python面向对象示例代码

Python面向对象示例代码#encoding:utf-8'''example 1 class test: def __init__(self,year,**arg): sel...
  • fengshenyue
  • fengshenyue
  • 2017-01-23 11:52:42
  • 411

深入理解Python中的面向对象

博客核心内容: 面向过程与面向对象的对比 id、type和value的讲解 类和对象的概念 初始化构造函数__init__的作用 self关键字的使用 继承的概念 组合的概念 接口的概念 抽象类的概念...
  • a2011480169
  • a2011480169
  • 2017-06-12 06:42:41
  • 4508

python面向对象小练习

class Animal(object): def __init__(self,name,weight): self.name = name self.weight = weight de...
  • wangyaninglm
  • wangyaninglm
  • 2015-04-24 14:34:38
  • 1976

Python 面向对象的基本概念 与c++ 面向对象的基本概念有点区别

Python使用类(class)和对象(object),进行面向对象(object-oriented programming,简称OOP)的编程。面向对象的最主要目的是提高程序的重复使用性。我们这么早...
  • lujiandong1
  • lujiandong1
  • 2015-05-20 19:21:54
  • 846

python面向对象例子

#!/usr/bin/python # -*- coding: UTF-8 -*- __author__ = 'Administrator' #面向对象 class Person: coun...
  • earbao
  • earbao
  • 2016-07-27 15:47:17
  • 579

C和C++的面向对象专题(6)——C++也能反射

今天我们来探讨C++的反射问题,缺乏反射机制一直是C++的大问题,很多系统的设计时,需要根据外部资源文件的定义,动态的调用内部的函数和接口,如果没有反射,将很难将外部的数据,转换为内部的方法。...
  • sun_xiaofan
  • sun_xiaofan
  • 2015-04-28 15:15:59
  • 2129
收藏助手
不良信息举报
您举报文章:Python面向对象——反射
举报原因:
原因补充:

(最多只允许输入30个字)