一.内置函数
1.instance() 判断对象与类的所属关系,包括继承关系
2.insubclass() 判读两个类是否有继承关系
class Person: def __len__(self, name ): self.name = name class Student(Person): def work(self): print("好好学习,天天向上") s1 = Student() print(isinstance(s1, Student)) #instance() 判断对象的所属关系,包括继承关系 print(isinstance(s1, Person)) print(issubclass(Student, Person)) #issubclass() 判断两个类是否有继承关系 print(issubclass(Person, Student))
二. 反射
1.通过类名进行的反射
2.通过对象进行的反射
class Person: CLASS = "python 14" def __init__(self, name, age): self.name = name self.age = age def work(self): print("鸭子") @classmethod def eat(cls): print("吃饭") @staticmethod def sleep(): print("睡觉") # print(Person.CLASS) # print(getattr(Person,"CLASS")) #通过类名反射查看静态属性 # # Person.work(11) # getattr(Person, "work")(12) #通过类名反射调用动态方法. 需要给self传值 # getattr(Person, "eat")() #通过类名反射调用类方法, # getattr(Person, "sleep")() #通过类名反射调用静态方法 p1 = Person("胡双俊", 19) print(getattr(p1,"CLASS")) #通过对象反射查看静态属性 print(getattr(p1, "name")) #通过对象反射查看动态属性 getattr(p1, "work")() #通过对象反射调用动态方法 getattr(p1, "eat")() #通过对象反射调用类方法 getattr(p1, "sleep")() #通过对象反射调用静态方法
3.模块反射
import os os.rename("__init__.py", "胡帅哥") getattr(os,"rename")("胡帅哥", "__init__.py")
4.反射自己模块中的内容,
def wahaha(): print('wahaha') def qqxing(): print('qqxing') # 反射自己模块中的内容 找到自己当前文件所在的命名空间 wahaha() qqxing() import sys print(sys.modules) # import 都相当于导入了一个模块 # 模块哪个导入了 哪个没导入 在我的python解释器里应该记录下来 # import sys 是一个模块,这个模块里的所有的方法都是和python解释器相关的 # sys.modules 这个方法 表示所有在当前这个python程序中导入的模块 # '__main__': <module '__main__' from 'D:/sylar/python_workspace/day20/4.反射.py'> print(sys.modules['__main__']) my_file = sys.modules['__main__'] my_file.wahaha() # my_file.qqxing() # # 'qqxing' # # 'wahaha' # getattr(my_file,'wahaha')() # getattr(my_file,'qqxing')()
5.setattr(对象名,'旧', "新")
delattr(对象名,"变量")
三.单例类