内置函数
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()