学习方法

  • 学练改管测

    • 听别人说 读 input
    • 自己说 自己写 output
  • 解决语法错误
  • 解决逻辑错误
    ##内容回顾
    ##继承 多态 封装
  • property
  • classmethod
  • staticmethod
    ##封装
  • 面向对象的语言本身就具有封装的特性 : 属性和方法都放在它所属的类中
  • 私有化 :
    • __名字

      • 静态属性\对象属性
      • 方法
        • 私有的方法
        • 私有的类方法
        • 私有的静态方法
    • 如何实现的
      • 通过在类的内部定义或者使用的时候会自动添加_类名来进行变形
      • 在类的外部使用的时候由于python不会做自动的变形,所以这个属性就被隐藏了
      • 如果我们一定要在外部使用,也可以自己加上_类名的变形机制
      • 但十分不建议你在类的外部直接使用私有的名字
    • 私有的
      • 不能在类的外部使用
      • 也不能被继承
  1. class A:
  2. @classmethod
  3. def __func(cls):
  4. print('infunc')
  5. @classmethod
  6. def f(cls):
  7. cls.__func()
  8. print(A.f)
  1. class A:
  2. @staticmethod
  3. def __func():
  4. print('infunc')
  5. @classmethod
  6. def f(cls):
  7. cls.__func()
  8. A.f()

property 把一个方法变成一个属性

  1. class Circle:
  2. @property
  3. def area(self):
  4. pass
  5. c.area()
  6. c.area # get 获取某个值
  7. c.area = 1 # set 给某一个属性赋值
  8. del c.area # delete 删某个属性
  1. class Box: # 盒子
  2. def __init__(self,length,width,height):
  3. self.__len = length
  4. self.__width = width
  5. self.__height = height
  6. @property
  7. def len(self):
  8. return self.__len
  9. @len.setter
  10. def len(self,value):
  11. if type(value) is int or type(value) is float:
  12. self.__len = value
  13. @len.deleter
  14. def len(self):
  15. del self.__len
  16. 盒子 = Box(10,20,30)
  17. ret = 盒子.len
  18. print(ret)
  19. 盒子.len = 'aaaa'
  20. ret = 盒子.len
  21. print(ret)
  22. del 盒子.len
  1. 基础的方法和语法能不能记住 :

    • 基础的数据类型 函数(内置函数\匿名函数的语法\普通函数)
    • 面向对象的基础语法 定义类 实例化 对象使用方法 查看属性
    • 继承的语法 多态的概念 封装的语法
    • 几个装饰器 :对应的功能,方法长什么样
  2. 基础的需求能不能完成
  3. 进阶的知识点 : 装饰器 生成器 递归函数 各种知识点的活学活用
  1. class File: # 盒子
  2. def __init__(self,path):
  3. self.__path = path
  4. @property
  5. def f(self):
  6. self.__f = open(self.__path,mode='w',encoding='utf-8')
  7. return self.__f
  8. @f.deleter
  9. def f(self):
  10. self.__f.close()
  11. del self.__f
  12. obj = File()
  13. obj.f # 文件句柄
  14. obj.f.write('balabala')
  15. del obj.f
  1. classmethod
  2. class A:
  3. @classmethod
  4. def func(cls):
  5. cls.静态属性名
  6. cls.静态方法
  7. cls.类方法
  8. class A:
  9. @staticmethod
  10. def func():
  11. pass

今日内容

  1. 面向对象结束
  2. logging模块 + 异常处理
  3. 模块和包 + 考试
  4. 模块和包 + 软件开发规范
  5. 网络编程 4天
  6. 并发编程 6天

今日内容

  • 反射

    • 反射对象中的内容
    • 反射类中的内容
    • 反射本文件中的内容
    • 反射模块中的内容
  • 内置方法
    • 能学多少学多少

issubclass

issubclass(Son,Foo)

  • 判断Son是否是Foo的子类
  • 判断类与类之间是否有继承关系关系
  1. class Foo(object):pass
  2. class Son(Foo):pass
  3. ret = issubclass(Son,Foo)
  4. print(ret)
  5. isinstance(obj,cls) #判断对象与类之间的关系,这个类也包括父类
  6. type()
  7. a = 1
  8. ret1 = type(a) is int
  9. ret2 = isinstance(a,int)
  10. print(ret1)
  11. print(ret2)
  12. class User(object):pass
  13. class VIPUser(User):pass
  14. alex = VIPUser()
  15. ret1 = type(alex) is User
  16. ret2 = isinstance(alex,User)
  17. print(ret1,ret2)
  18. ret1 = type(alex) is VIPUser
  19. ret2 = isinstance(alex,VIPUser)
  20. print(ret1,ret2)

isinstance(obj,类)

  • 承认继承关系的

类 = type(obj)

  • 只承认实例化这个对象的那个类(不承认所有的继承关系)

反射

  • 知识点

    • 所有的a.b都可以变成getattr(a,'b')
    • 用字符串数据类型的变量名 来获取实际的变量值
    • 用字符串数据类型的变量名 找到这个变量对应的内存地址
  • 使用对象反射
    • obj.属性名
    • obj.方法名()
  • 使用类反射
    • cls.静态变量名
    • cls.类方法名()
    • cls.静态方法名()
  • 使用模块反射
  1. import time
  2. time.time()
  3. #调用函数和方法 地址+()
  4. def func():
  5. print(1)
  6. func()
  7. a = func
  8. a()
  9. #反射当前文件

1.使用对象反射

  1. class Manager: # 管理员用户
  2. def __init__(self,name):
  3. self.name = name
  4. def create_course(self): # 创建课程
  5. print('in Manager create_course')
  6. def create_student(self): # 给学生创建账号
  7. print('in Manager create_student')
  8. def show_courses(self): # 查看所有课程
  9. print('in Manager show_courses')
  10. def show_students(self): # 查看所有学生
  11. print('in Manager show_students')

不用反射

  1. alex = Manager('alex')
  2. operate_lst = ['创建课程','创建学生账号','查看所有课程','查看所有学生']
  3. for index,opt in enumerate(operate_lst,1):
  4. print(index,opt)
  5. num = input('请输入您要做的操作 :')
  6. if num.isdigit():
  7. num = int(num)
  8. if num == 1:
  9. alex.create_course()
  10. elif num == 2:
  11. alex.create_student()
  12. elif num == 3:
  13. alex.show_courses()
  14. elif num == 4:
  15. alex.show_students()

使用反射

  1. alex = Manager('alex')
  2. operate_lst = [('创建课程','create_course'),('创建学生账号','create_student'),
  3. ('查看所有课程','show_courses'),('查看所有学生','show_students')]
  4. for index,opt in enumerate(operate_lst,1):
  5. print(index,opt[0])
  6. num = input('请输入您要做的操作 :')
  7. if num.isdigit():
  8. num = int(num)
  9. if hasattr(alex,operate_lst[num-1][1]):
  10. getattr(alex,operate_lst[num-1][1])()

如何使用反射

  1. alex = Manager('alex')
  2. print(alex.name) # ==> print(getattr(alex,'name')) 用的相对少
  3. funcname = 'create_course'
  4. a = getattr(alex,funcname)
  5. b = alex.create_course
  6. print(a)
  7. print(b)
  8. getattr(alex,'create_course')() # ==> # alex.create_course() 用的多
  • 两种方式

    • 对象名.属性名 / 对象名.方法名() 可以直接使用对象的方法和属性
    • 当我们只有字符串数据类型的内容的时候
      • getattr(对象名,'方法名')()
      • getattr(对象名,'属性名')
  • shop 买东西类
    • 浏览商品 scan_goods
    • 选择商品 ,添加到购物车 choose_goods
    • 删除商品 delete_goods
  1. class Shop:
  2. def __init__(self,name):
  3. self.name = name
  4. def scan_goods(self):
  5. print('%s正在浏览商品'%self.name)
  6. def choose_goods(self):
  7. print('%s正在选择商品'%self.name)
  8. def delete_goods(self):
  9. print('%s正在删除商品'%self.name)
  10. s = Shop('self哥')
  11. s.choose_goods()
  12. s.scan_goods()
  13. s.delete_goods()
  14. if hasattr(s,'choose_goods'): # 判断s对象有没有choose_goods
  15. func = getattr(s,'choose_goods') # 使用s找到choose_goods对应的内存地址
  16. print(func)
  17. func()
  18. content = input('')
  19. if hasattr(s,content): # 判断s对象有没有choose_goods
  20. func = getattr(s,content) # 使用s找到choose_goods对应的内存地址
  21. print(func)
  22. func()
  23. opt_lst = ['scan_goods','choose_goods','delete_goods']
  24. for index,opt in enumerate(opt_lst,1):
  25. print(index,opt)
  26. num = int(input('num :'))
  27. if hasattr(s,opt_lst[num-1]):
  28. getattr(s,opt_lst[num-1])()

查看一个类中所有的方法-和反射没关系

  1. for i in Shop.__dict__.keys():
  2. if not i.startswith('__'):
  3. print(i)

使用类反射

  1. class A:
  2. Country = '中国'
  3. @classmethod
  4. def show(cls):
  5. print('国家 : ',cls.Country)
  6. 'Country'
  7. print(getattr(A,'Country')) # print(A.Country)
  8. A.show # getattr(A,'show')
  9. 'show'
  10. getattr(A,'show')() # A.show()

反射模块中的方法

  1. import re
  2. ret = re.findall('\d+','2985urowhn0857023u9t4')
  3. print(ret)
  4. 'findall'
  5. getattr(re,'findall') # re.findall
  6. ret = getattr(re,'findall')('\d','wuhfa0y80aujeiagu')
  7. print(ret)
  8. def func(a,b):
  9. return a+b
  10. wahaha = func
  11. ret = wahaha(1,2)
  12. print(ret)
  13. import time
  14. time.time == getattr(time,'time')
  15. time.time() == getattr(time,'time')()
  16. 'time'
  17. now = getattr(time,'time')()
  18. print(now)
  19. time.sleep(1)
  20. print(321)
  21. getattr(time,'sleep')(1) # time.sleep(1)
  22. print(123)
  1. 只要是a.b这种结构,都可以使用反射
  2. 用对象\类\模块反射,都只有以下场景
  3. 这种结构有两种场景
  4. # a.b b是属性或者变量值
  5. # getattr(a,'b') == a.b
  6. # a.b() b是函数或者方法
  7. # a.b()
  8. # getattr(a,'b')()
  9. # a.b(arg1,arg2)
  10. # getattr(a,'b')(arg1,arg2)
  11. # a.b(*args,**kwargs)
  12. # getattr(a,'b')(*args,**kwargs)

反射本文件中的内容 :

  • 只要是出现在全局变量中的名字都可以通过
  1. getattr(modules[__name__],字符串数据类型的名字)
  2. from sys import modules
  3. print(modules) # DICT KEY是模块的名字,value就是这个模块对应的文件地址
  4. import re
  5. print(re) # <module 're' from 'D:\\python3\\lib\\re.py'>
  6. print(modules['re'])
  7. #选课系统
  8. 're': <module 're' from 'D:\\python3\\lib\\re.py'>
  9. print(re.findall)
  10. print(modules['re'].findall)
  1. a = 1
  2. b = 2
  3. while True:
  4. name = input('变量名 :')
  5. print(__name__)
  6. print(getattr(modules[__name__],name))
  7. '__main__': <module '__main__' from 'D:/PyCharmProject/s20/day23/5.反射.py'>
  8. print(a,b)
  9. print(modules['__main__'].a)
  10. print(modules['__main__'].b)
  11. print(getattr(modules['__main__'], 'a'))
  12. print(getattr(modules['__main__'], 'b'))

语法

  1. a = 1
  2. b = 2
  3. getattr(modules[__name__],'变量名')
  4. #函数名
  5. def func(a,b):
  6. print('in func',a,b)
  7. getattr(modules[__name__],'func') # func
  8. func(1,2)
  9. getattr(modules[__name__],'func')(1,2) # func
  10. #类名
  11. class Course:
  12. def func(self):
  13. print('in func')
  14. print(Course)
  15. 'Course'
  16. print(getattr(modules[__name__],'Course')) # Course
  17. getattr(modules[__name__],'Course')() # 实例化的过程
  1. '''
  2. 只要是a.b这种结构,都可以使用反射
  3. 用对象\类\模块反射,都只有以下场景
  4. 这种结构有两种场景
  5. a.b b是属性或者变量值
  6. getattr(a,'b') == a.b
  7. a.b() b是函数或者方法
  8. a.b()
  9. getattr(a,'b')()
  10. a.b(arg1,arg2)
  11. getattr(a,'b')(arg1,arg2)
  12. a.b(*args,**kwargs)
  13. getattr(a,'b')(*args,**kwargs)
  14. 如果是本文件中的内容,不符合a.b这种结构
  15. # 直接调用func()
  16. # getattr(sys.modules[__name__],'func')()
  17. # 直接使用类名 Person()
  18. # getattr(sys.modules[__name__],'Person')()
  19. # 直接使用变量名 print(a)
  20. # getattr(sys.modules[__name__],'a')
  21. 所有的getattr都应该和hasattr一起使用
  22. # if hasattr():
  23. getattr()
  24. '''
  1. class A:
  2. def qqxing(self):
  3. print('qqxing')
  4. alex = A()
  5. alex.name = 'sb'
  6. print(alex.name)
  7. 'name'
  8. setattr 能够通过字符串数据类型的变量名 给一个对象创建一个新的属性
  9. setattr(alex,'name','sb') # alex.name = 'sb'
  10. print(alex.name)
  11. def wahaha(self):
  12. print('wahaha',self.name)
  13. setattr(alex,'wahaha',wahaha)
  14. print(alex.__dict__)
  15. alex.wahaha(alex)
  16. delattr()
  17. print(alex.__dict__)
  18. delattr(alex,'name') # del alex.name
  19. print(alex.__dict__)
  1. '''
  2. hasattr和getattr
  3. 只要是a.b这种结构,都可以使用反射
  4. 用对象\类\模块反射,都只有以下场景
  5. 这种结构有两种场景
  6. a.b b是属性或者变量值
  7. getattr(a,'b') == a.b
  8. a.b() b是函数或者方法
  9. a.b()
  10. getattr(a,'b')()
  11. a.b(arg1,arg2)
  12. getattr(a,'b')(arg1,arg2)
  13. a.b(*args,**kwargs)
  14. getattr(a,'b')(*args,**kwargs)
  15. 如果是本文件中的内容,不符合a.b这种结构
  16. # 直接调用func()
  17. # getattr(sys.modules[__name__],'func')()
  18. # 直接使用类名 Person()
  19. # getattr(sys.modules[__name__],'Person')()
  20. # 直接使用变量名 print(a)
  21. # getattr(sys.modules[__name__],'a')
  22. # 所有的getattr都应该和hasattr一起使用
  23. # if hasattr():
  24. getattr()
  1. setattr 只用来修改或者添加属性\变量,不能用来处理函数或者是其他方法
  2. # a.b = value
  3. # setattr(a,'b',value)
  4. delattr 只用来删除 属性\变
  5. # del a.b 删除属性 相当于删除了a对象当中的b属性
  6. # delattr(a,'b')
  7. '''

不使用反射完成的选课作业

  1. class Manager: # 管理员用户
  2. opt_lst = ['创建课程','给学生创建账号','查看所有课程','查看所有学生','查看所有学生的选课情况','退出']
  3. def __init__(self,name):
  4. self.name = name
  5. def create_course(self): # 创建课程
  6. print('in Manager create_course')
  7. def create_student(self): # 给学生创建账号
  8. print('in Manager create_student')
  9. def show_courses(self): # 查看所有课程
  10. print('in Manager show_courses')
  11. def show_students(self): # 查看所有学生
  12. print('in Manager show_students')
  13. def show_students_courses(self): # 查看所有学生的选课情况
  14. print('in Manager show_students_courses')
  15. def quit(self):
  16. exit()
  17. class Student:
  18. opt_lst = ['查看所有课程', '查看已选课程', '选择课程', '退出']
  19. def __init__(self,name):
  20. self.name = name
  21. def show_courses(self): # 查看所有课程
  22. print('in Student show_courses')
  23. def show_selected_course(self): # 查看已选课程
  24. print('in Student show_selected_course')
  25. def choose_course(self): # 选择课程
  26. print('in Student choose_course')
  27. def quit(self):
  28. exit()
  29. 1.输入用户名和密码
  30. 2.程序判断 用户名密码 是否正确 获知身份
  31. 3.如果是学生
  32. # 1,2,3,4学生能做的事情
  33. # 让用户选择
  34. 4.如果是管理员
  35. # 1,2,3,4,5,6管理员能做的事
  36. # 让管理员选择
  37. import hashlib
  38. def get_md5(usr,pwd):
  39. md5 = hashlib.md5(usr.encode('utf-8'))
  40. md5.update(pwd.encode('utf-8'))
  41. return md5.hexdigest()
  42. def login(usr,pwd):
  43. with open('userinfo',encoding='utf-8') as f:
  44. for line in f:
  45. username,password,ident = line.strip().split('|')
  46. if usr == username and get_md5(usr,pwd) == password:
  47. return {'result':True,'identify':ident,'username':usr}
  48. else: return {'result':False}
  49. def auth():
  50. opt_lst1 = ['登录','退出']
  51. while True:
  52. for index,opt in enumerate(opt_lst1,1):
  53. print(index,opt)
  54. num = int(input('请输入你要做的操作 :'))
  55. if num == 1:
  56. usr = input('username :')
  57. pwd = input('password :')
  58. ret = login(usr,pwd)
  59. if ret['result']:
  60. print('登录成功')
  61. return ret
  62. else:
  63. print('登录失败')
  64. elif num == 2:
  65. exit()
  66. ret = auth()
  67. print(ret)
  68. if ret['result']:
  69. if ret['identify'] == 'Manager':
  70. manager = Manager(ret['username'])
  71. while True:
  72. for index,opt in enumerate(Manager.opt_lst,1):
  73. print(index,opt)
  74. num = int(input('请选择您要操作的序号 :'))
  75. if num == 1:
  76. manager.create_course()
  77. elif num == 2:
  78. manager.create_student()
  79. elif num == 3:
  80. manager.show_courses()
  81. elif num == 4:
  82. manager.show_students()
  83. elif num == 5:
  84. manager.show_students_courses()
  85. elif num == 6:
  86. manager.quit()
  87. elif ret['identify'] == 'Student':
  88. student = Student(ret['username'])
  89. while True:
  90. for index,opt in enumerate(Student.opt_lst,1):
  91. print(index,opt)
  92. num = int(input('请选择您要操作的序号 :'))
  93. if num == 1:
  94. student.show_courses()
  95. elif num == 2:
  96. student.show_selected_course()
  97. elif num == 3:
  98. student.choose_course()
  99. elif num == 4:
  100. student.quit()
  101. ##登录 一个用户在一台电脑上只能登录三次,三次之后就锁住了
  102. 在函数里不能用print
  103. # 模块 写一个函数完成一个功能

使用反射完成的选课作业

  1. class Manager: # 管理员用户
  2. opt_lst = [('创建课程','create_course'),('给学生创建账号','create_student'),
  3. ('查看所有课程','show_courses'),('查看所有学生','show_students'),
  4. ('查看所有学生的选课情况','show_students_courses'),('退出','quit')]
  5. def __init__(self,name):
  6. self.name = name
  7. def create_course(self): # 创建课程
  8. print('in Manager create_course')
  9. def create_student(self): # 给学生创建账号
  10. print('in Manager create_student')
  11. def show_courses(self): # 查看所有课程
  12. print('in Manager show_courses')
  13. def show_students(self): # 查看所有学生
  14. print('in Manager show_students')
  15. def show_students_courses(self): # 查看所有学生的选课情况
  16. print('in Manager show_students_courses')
  17. def quit(self):
  18. exit()
  19. class Student:
  20. opt_lst = [('查看所有课程','show_courses'), ('查看已选课程','show_selected_course'),
  21. ('选择课程','choose_course'), ('退出','quit')]
  22. def __init__(self,name):
  23. self.name = name
  24. def show_courses(self): # 查看所有课程
  25. print('in Student show_courses')
  26. def show_selected_course(self): # 查看已选课程
  27. print('in Student show_selected_course')
  28. def choose_course(self): # 选择课程
  29. print('in Student choose_course')
  30. def quit(self):
  31. exit()
  32. 1.输入用户名和密码
  33. 2.程序判断 用户名密码 是否正确 获知身份
  34. 3.如果是学生
  35. # 1,2,3,4学生能做的事情
  36. # 让用户选择
  37. 4.如果是管理员
  38. # 1,2,3,4,5,6管理员能做的事
  39. # 让管理员选择
  40. import hashlib
  41. def get_md5(usr,pwd):
  42. md5 = hashlib.md5(usr.encode('utf-8'))
  43. md5.update(pwd.encode('utf-8'))
  44. return md5.hexdigest()
  45. def login(usr,pwd):
  46. with open('userinfo',encoding='utf-8') as f:
  47. for line in f:
  48. username,password,ident = line.strip().split('|')
  49. if usr == username and get_md5(usr,pwd) == password:
  50. return {'result':True,'identify':ident,'username':usr}
  51. else: return {'result':False}
  52. def auth():
  53. opt_lst1 = ['登录','退出']
  54. while True:
  55. for index,opt in enumerate(opt_lst1,1):
  56. print(index,opt)
  57. num = int(input('请输入你要做的操作 :'))
  58. if num == 1:
  59. usr = input('username :')
  60. pwd = input('password :')
  61. ret = login(usr,pwd)
  62. if ret['result']:
  63. print('登录成功')
  64. return ret
  65. else:
  66. print('登录失败')
  67. elif num == 2:
  68. exit()
  69. import sys
  70. ret = auth()
  71. print(ret)
  72. if ret['result']:
  73. if hasattr(sys.modules[__name__],ret['identify']):
  74. # sys.modules[__name__]表示找到的当前文件所在的内存空间
  75. # ret['identify']只能是'Manager','Student'
  76. # hasattr(sys.modules[__name__],ret['identify'])判断当前的空间中有没有Student或者Manager这个名字
  77. cls = getattr(sys.modules[__name__],ret['identify'])
  78. obj = cls(ret['username'])
  79. # cls 要么 == Student类的内存地址,要么 == Manager类的内存地址
  80. while True:
  81. for index,opt in enumerate(cls.opt_lst,1):
  82. print(index,opt[0])
  83. num = int(input('请选择您要操作的序号 :'))
  84. if hasattr(obj,cls.opt_lst[num-1][1]):
  85. getattr(obj,cls.opt_lst[num-1][1])()
  86. # if ret['identify'] == 'Manager':
  87. # manager = Manager(ret['username'])
  88. # while True:
  89. # for index,opt in enumerate(Manager.opt_lst,1):
  90. # print(index,opt[0])
  91. # num = int(input('请选择您要操作的序号 :'))
  92. # if hasattr(manager,Manager.opt_lst[num-1][1]):
  93. # getattr(manager,Manager.opt_lst[num-1][1])()
  94. # elif ret['identify'] == 'Student':
  95. # student = Student(ret['username'])
  96. # while True:
  97. # for index,opt in enumerate(Student.opt_lst,1):
  98. # print(index,opt[0])
  99. # num = int(input('请选择您要操作的序号 :'))
  100. # if hasattr(student,Student.opt_lst[num-1][1]):
  101. # getattr(student,Student.opt_lst[num-1][1])()
  102. 登录 一个用户在一台电脑上只能登录三次,三次之后就锁住了
  103. 在函数里不能用print
  104. # 模块 写一个函数完成一个功能

2019-04-01-day023-对象实例的反射实例化的更多相关文章

  1. [2019.04.01]Linux 学习心得(2)-- tar 命令的理解

    这篇文章并不是发布最早的但是阅读量却每天都见长,很想知道各位大大是怎么找到这篇文章的.如果不忙,还请各位大大评论一下我看看,没准我可以为大家改进一下本文,提升一下质量. =============== ...

  2. Python笔记(七):字典、类、属性、对象实例、继承

    (一)  简单说明 字典是Python的内置数据结构,将数据与键关联(例如:姓名:张三,姓名是键,张三就是数据).例如:下面这个就是一个字典 {'姓名': '张三', '出生日期': '2899-08 ...

  3. 每日一练ACM 2019.04.13

    2019.04.13 第1002题:A+B Proble Ⅱ Problem DescriptionI have a very simple problem for you. Given two in ...

  4. C#托管堆对象实例包含什么

    每个托管堆上的对象实例除了包含本身的值外,还包括:○ Type Object Ponter: 指向Type对象实例.如果是同类型的对象实例,就指向同一个Type对象实例.○ Sync Block In ...

  5. Mybatis源码解析,一步一步从浅入深(四):将configuration.xml的解析到Configuration对象实例

    在Mybatis源码解析,一步一步从浅入深(二):按步骤解析源码中我们看到了XMLConfigBuilder(xml配置解析器)的实例化.而且这个实例化过程在文章:Mybatis源码解析,一步一步从浅 ...

  6. Java反射02 : Class对象获取的三种方式和通过反射实例化对象的两种方式

    1.Class对象获取的三种方式 本文转载自:https://blog.csdn.net/hanchao5272/article/details/79361463 上一章节已经说过,一般情况下,Jav ...

  7. SpringBoot源码解析:创建SpringApplication对象实例

    上篇文章SpringBoot自动装配原理解析中,我们分析了SpringBoot的自动装配原理以及@SpringBootApplication注解的原理,本篇文章则继续基于上篇文章中的main方法来分析 ...

  8. java学习笔记之反射—Class类实例化和对象的反射实例化

    反射之中所有的核心操作都是通过Class类对象展开的,可以说Class类是反射操作的根源所在,但是这个类的实例化对象,可以采用三种方式完成. java.lang.Class类的定义: public f ...

  9. [C#.NET 拾遗补漏]04:你必须知道的反射

    阅读本文大概需要 3 分钟. 通常,反射用于动态获取对象的类型.属性和方法等信息.今天带你玩转反射,来汇总一下反射的各种常见操作,捡漏看看有没有你不知道的. 获取类型的成员 Type 类的 GetMe ...

随机推荐

  1. Single Number II leetcode java

    问题描述: Given an array of integers, every element appears three times except for one. Find that single ...

  2. 141. Linked List Cycle&142. Linked List Cycle II(剑指Offer-链表中环的入口节点)

    题目: 141.Given a linked list, determine if it has a cycle in it. 142.Given a linked list, return the ...

  3. iptables -F 与 -X 区别

    test: 1.iptables 初始化 2.iptables -X (第一次) 错误原因是自定义链表(test)不为空 3.iptables -F 4.iptables -X ok,实验结束 实验报 ...

  4. 【IDEA】【8】上传已有项目到Git

    问题:开发初期没有建立GIT仓库,开发一段时间后,需要将已有代码上传到Git 解决方案: 1,首先使用Git命令行 git clone XXXXX.git 将项目下载 2,拷贝下载下来的项目根目录下的 ...

  5. 整合多个网络的拓扑结构并降维(Mashup)

    整合多个网络的拓扑结构并降维(Mashup) 介绍一个整合多个网络拓扑结构的方法,方法来源:Compact Integration of Multi-Network Topology for Func ...

  6. python-day74--知识总体总结

    1. 课程介绍        - 数据类型        - 函数        - 面向对象三大特性:继承,封装,多态        - socket:本质传输字节:所有网络通信都基于socket  ...

  7. poj-2115-exgcd

    C Looooops Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 32062   Accepted: 9337 Descr ...

  8. oracle查看列数据类型

    select * from user_tab_columns where table_name = upper('表名')

  9. Auto Encoder用于异常检测

    对基于深度神经网络的Auto Encoder用于异常检测的一些思考 from:https://my.oschina.net/u/1778239/blog/1861724 一.前言 现实中,大部分数据都 ...

  10. 常用的flex知识 ,比起float position 好用不少

      flex布局具有便捷.灵活的特点,熟练的运用flex布局能解决大部分布局问题,这里对一些常用布局场景做一些总结. web页面布局(topbar + main + footbar) 示例代码   要 ...