反射及内置方法

一.内置函数

  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(对象名,"变量")

三.单例类

  

猜你喜欢

转载自www.cnblogs.com/hu13/p/9392861.html