内置函数
isinstance() #对象 类 issubclass() #子类 父类
#反射:使用字符串数据类型的变量名来使用变量
#文件中存储的都是字符串
#网络上能传递的也最接近字符串
#用户输入的
# hash是加速寻址 print(hash('str')) print(hash('str'))
hash之后的数字,就是内存地址
hash之后,将value存储在对应的内存地址中
字典占用的内存相对的比较多
用空间换时间
list 占用的内存比较少,但是没有字典快
#示例:在类中,所有对象,默认打印的是内存地址 class List: def __init__(self,*args): self.l = list(args) l = List(1,2,3,4,5) print(l)
执行输出:
反射:
使用字符串数据的变量名来使用变量
wwwh 即 what,where,why,how 这4点是一种学习方法
反射:
使用字符串数据类型的变量名来使用变量
1.文件中存储的都是字符串
2.网络上能传递的也最接近字符串
3.用户输入的也是字符串
上面3种情况都是字符串,如果这有这种情况的,需要操作类或者模块时,就需要用到反射
有4种应用
类调用静态属性
对象调用属性模块中的名字
调用自己模块中的名字
a = 1 import sys b = getattr(sys.modules['__main__'], 'a') print(b) # 输出变量a的值,即1 def func(): print('11') c = getattr(sys.modules['__main__'], 'func') print(c) # 输出func的内存地址 getattr(sys.modules['__main__'], 'func')() # 执行方法,输出11main__'],'func')()
Teacher 类 wahaha方法的连续反射
import sys class Teacher(): def wahaha(self):print('wa') alex = getattr(sys.modules['__main__'],'Teacher')() #获取当前模块的Teacher,并执行 print(alex) #Teacher类的内存地址 getattr(alex,'wahaha')()#执行方法wahaha
执行后输出:
反射静态方法:
import sys class Teacher(object): @staticmethod def wahaha():print('wa') Teacher = getattr(sys.modules['__main__'],'Teacher') #获取当前模块的Teacher类 getattr(Teacher,'wahaha')() #执行类方法,注意加括号
找对象import sys
class Teacher(object):
# def wahaha(self):print('wa') @staticmethod def qqxing():print('qq') alex = Teacher() b = getattr(sys.modules['__main__'],'alex') print(b)
class Student: def cls001(self):print('班级一') @staticmethod def cls002():print('班级二') #1.通过类调用静态属性 if hasattr(Student,'cls001'): #判断Student方法在中cls01是否存在 print(getattr(Student,'cls001')) a = Student Student.cls002()