关键词:
一、反射
1、什么是反射?
用字符串类型的名字去操作变量
2、反射对象中的属性和方法
getattrhasattrsetattrdelettr
3、 getattr:通过字符串类型的名字取到变量的值
hasattr:判断字符串类型的名字对应的值是否存在
setattr :(建立)设置字符串类型的名字和值
deleattr:删除字符串类型的变量
getattr:
class A:
def func(self):
print(‘in func‘)
a = A()
a.name = ‘alex‘
a.age = 63
# 反射对象的属性
ret = getattr(a,‘name‘) # 通过变量名的字符串形式取到的值
print(ret)
hasattr(与getattr配合使用)
class A:
price=20
@classmethod
def func(self):
print(‘in the func‘)
if hasattr(A,‘func‘): #hasattr判断是否变量存在
ret=getattr(A,‘func‘)
ret()
反射模块中的属性和方法:
可以反射模块(包括内置模块)的属性和方法,可以反射自己模块(其他模块)的函数和变量,还可以反射一个模块的类。
#模块
import my
#反射模块的属性
print(my.day)
print(getattr(my,‘day‘))
#反射模块的方法
getattr(my,‘wahaha‘)()
#内置模块也能用
time
asctime
import time
print(getattr(time,‘time‘)())
print(getattr(time,‘asctime‘)())
def qqxing():
print(‘qqxing‘)
year = 2018
import sys
print(sys.modules[‘__main__‘].year)
# 反射自己模块中的变量
print(getattr(sys.modules[‘__main__‘],‘year‘))
# 反射自己模块中的函数
getattr(sys.modules[‘__main__‘],‘qqxing‘)()
变量名 = input(‘>>>‘)
print(getattr(sys.modules[__name__],变量名))
#要反射的函数有参数怎么办?
print(time.strftime(‘%Y-%m-%d %H:%M:S‘))
print(getattr(time,‘strftime‘)(‘%Y-%m-%d %H:%M:S‘))
#一个模块中的类能不能反射得到?
import my
print(getattr(my,‘C‘)())
if hasattr(my,‘name‘):
getattr(my,‘name‘)
setattr:设置修改值
class A:
def func(self):
pass
a=A()
setattr(a,‘name‘,‘alex‘)
print(getattr(a,‘name‘))
delattr:删除一个变量
# delattr 删除一个变量
delattr(a,‘name‘)
print(a.name)
delattr(A,‘name‘)
print(a.name)
二、类的内置方法
__str__ 、__repr__、__del__、__len__、__call__
__str__:自己没有__str__方法的时候,就去父类object去调用,返回调用这个方法的对象的内存地址,如果自己定义了__str__方法,那么就执行自己的__str__方法,打印这个对 象的时候,就会执行a.__str__方法(默认就执行了),(返回一些自己定义的方法)。
class A:
def __str__(self):
return "A‘s object"
a=A()
print(a)
__repr__:类似__str__方法,就是调用repr执行的内置方法,%r,print(repr)也是执行的它(不知道它有什么用)
__del__:析构函数,删除一个对象之前进行一些收尾工作
__call__:执行函数的时候自动执行打印一些属性
反射(高大上)类的内置方法
反射对象的反射类的反射模块的反射本模块的反射:找到本模块sys.modules[__name__]python面向对象中的反射:通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射)hasattr()函数用于判断对象是否包含... 查看详情
面向对象的进阶---反射--一些内置方法
反射反射和一些类的内置方法1isinstance----issubclasstype()--判断是不是ininstance(object,cls)判断是不是类的对象如果这个类有父类这个对象也是这个父类的对象issubclaaa(cls,cls)判断一个类是不是另一个类的子类=============================反射... 查看详情
27isinstance与issubclass反射内置方法(代码片段)
...,Bar))#输出一个Trueobj=Foo()print(isinstance(obj,Foo))#输出一个True反射反射:通过字符串来反射/映射到对象/类的属性上classPeople:def__init__(self,name,age):self.name=nameself.age=agedefrun(self):print(‘%sisrunning‘%self.name)obj=People(‘egon‘,18)print(hasattr(obj,... 查看详情
反射和内置方法重写
isinstance和issubclassisinstance(obj,cls)检查是否obj是否是类cls的对象classFoo(object):passobj=Foo()sinstance(obj,Foo)issubclass(sub,super)检查sub类是否是super类的派生类 classFoo(object):passclassBar(Foo):passissu 查看详情
面向对象:反射内置方法(代码片段)
反射:通过字符串映射到对象或者类的属性反射的方法:classPeople:country="China"def__init__(self,name,age):self.name=nameself.age=agedeftalk(self):print("%sistalking"%self.name)obj=People("neo",22)"""判断是否拥有某个属性:hasattr(o,name)#n 查看详情
类的相关内置函数及反射(代码片段)
类变量的内存位置相关练习1.1classStarkConfig(object):list_display=[]defget_list_display(self):self.list_display.insert(0,33)returnself.list_displayclassRoleConfig(StarkConfig):list_display=[11,22]s1=StarkConfig()r 查看详情
注解和反射(代码片段)
1、注解1、内置注解@Override表示重写了父类的方法,有此注解的方法必须是重写了其父类的方法。@Deprecated表示该方法不推荐被使用或者有更好的方法代替,在其他地方使用该方法时会被划掉。@SuppressWarnings("all")表示不检测警告... 查看详情
2017年8月27日反射的初步认识
反射原理主要是为了做框架用的,但是了解底层原理对以后深入理解框架概念还是蛮有帮助的。 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对... 查看详情
反射内置方法(代码片段)
反射~~~ 反射 使用字符串数据类型的变量名来获取这个变量的值反射类中的变量:静态属性 类方法 静态方法classFoo:school=‘qinghua‘#静态属性country=‘China‘language=‘English‘@classmethod#类方法defclass_method... 查看详情
java通过反射获取带参数构造方法并使用
....sanmao10;importjava.lang.reflect.Constructor;publicclasstest2/***###27.05_反射(通过反射获取带参构造方法并使用)*Constructor*Class类的newInstance()方法是使用该类无参的构造函数创建对象,如果一个类没有无参的构造函数,*就不能这样创建了,可以调... 查看详情
绑定与非绑定方法及反射,isinstance和issubclass内置函数(代码片段)
...staticmethod)isinstance和issubclass内置函数1.isinstance2.issubclass反射反射定义4个可以实现反省的函数(内置函数)反射使用场景绑定方法与非绑定方法1.绑定方法?绑定方法:绑定给谁就应该由谁来调用,谁来调用就会将谁当做第一个参数... 查看详情
反射以及内置方法(代码片段)
反射反射是使用字符串数据类型的变量名来获取这个变量的值a=1b=2name=‘wang’使用场景: input:用户输入的如果是a,就打印1,如果是b,就打印2,如果是name,就打印‘wang’ 文件:从文件中读出的字符串,转换成变量的... 查看详情
面向对象-反射-其他内置方法(代码片段)
1.反射1.1反射含义通过字符串的形式操作对象的相关属性。方法有hasattr,getattr,delattr#!/usr/bin/envpython#-*-coding:utf-8-*-#Author:vitaclassPeople:country=‘China‘def__init__(self,name,age):self.name=nameself.age=agedeftalk(self): 查看详情
反射内置方法
#isinstance()判断对象所属类型,包括继承关系判断对象#classA:pass#classB(A):pass#b=B()#print(isinstance(b,B))#b属于B#print(isinstance(b,A))#b属于A##ssubclass()判断类与类之间的继承关系#classA:pass#classB(A):pass#print(issubclass(B,A))#b属于 查看详情
反射机制--获取类的方法
一、反射机制获取一个类的方法 1.使用class属性 类名.class 2.使用Class类的forName(“类名”)方法, Class.forName("类名") 3.new一个类然后调getClass()方法 new类名().getClass()实例:publicvoidtext()thr... 查看详情
1面向对象内置函数2反射3内置方法
1、isinstance() 判断对象所属类型,包括继承关系2、issubclass()判断类与类之间的继承关系 classA:pass classB(A):pass print(isinstance(b,B)) #o,t print(isinstance(b,A)) # o,t classmystr(str):pass ms=m 查看详情
反射应用--取得类的结构
1,目标: 通过反射取得类的全部接口,取得类所继承的父类取得类全部构造方法通过反射取得类的全部方法通过反射取得一个类的全部属性。具体类型反射的深入-取得类的结构要想通过反射取得类的结构,需要使用接口:j... 查看详情
面向对象之反射及内置方法
一、静态方法(staticmethod)和类方法(classmethod)类方法:有个默认参数cls,并且可以直接用类名去调用,可以与类属性交互(也就是可以使用类属性)静态方法:让类里的方法直接被类调用,就像正常调用函数一样类方法和静态... 查看详情