day27 反射

# 复习: # class 类名(父类1, 父类2): # 静态属性 = '' # 静态属性,类属性 # # def __init__(self): # 初始化方法 # pass # # def func(self): # 动态属性,方法 # pass # 对象=类名() # 对象.方法名() # 对象.属性名 # 对象.函数名() # 组合:是么是什么的关系 # 一个类的属性,是另一个类的对象 # class Teacher: # pass # # # class Course: # def __init__(self, name, price, period): # self.name = name # self.price = price # self.period = period # # # python = Course("python", 19800, '6 months') # # # class Classes: # def __init__(self, name, course): # self.name = name # self.course = course # # # pys9 = Classes('python_s9', python) # print(pys9.course.name) # 一个类的属性,是另一个类的对象 # python.name = 'python全栈' # print(pys9.course.name) #面向对象的三大特性:继承、多态、封装 #继承: #单继承: #父类 (超类、基类) #子类(派生类):派生方法与属性 #特性:先找自己的,没有再找父类的 #多继承(面试) #不超过三个父类,不超过三层 #先找自己的,没有再找最近的父类的方法 #接口类和抽象类(不重要) #经典类(深度优先)与新式类(广度优先)(面试) #super只能在python3中使用 mro #super是根据mro广度优先顺序找上一个类 #多态(面试) #多态和鸭子类型 # 封装 ***(面试) #私有的 #__名字 #只能在类的内部使用,子类无法继承 #三个装饰器 # @property **** 规范 面试 # @staticmethod *** # @classmethod # 内置函数:isinstance issubclass # class A: # pass # class B(A): # pass # a = A() # print(isinstance(a,A)) # print(issubclass(B,A)) #反射:就是用字符串去操作变量 #方法:hasattr,getattr,setattr,delattr # class A: # def func(self): # print('in func') # a = A() # a.name = 'alex' # a.age = 63 #反射对象的属性 # ret = getattr(a,'name') #通过变量名的字符串取到值 # print(ret) # 变量名 = input('>>>') #func # print(getattr(a,变量名)) # print(a.__dict__[变量名]) #反射对象的方法 # a.func() # ret = getattr(a,'func')() class A: price = 20 @classmethod def func(cls): print('in func') #反射类的属性 # A.price # print(getattr(A,'price')) # 反射类的方法 :classmethod staticmethod #A.func() #if hasattr(A,'func'): 夫妻档 # getattr(A,'func')() 夫妻档 #模块 # import my # print(my.day) # print(getattr(my,'day')) # #反射模块的方法 # getattr(my,'wahaha')() #内置模块 # import time # print(getattr(time,'time')()) # print(getattr(time,'asctime')()) #内置的类方法与内置函数之间有着紧密的关联 #双下方法 #obj.__str__ = str(obj) # obj.__repr__ = repr(obj) class Teacher: def __init__(self,name,salary): self.name = name self.salary = salary def __str__(self): return "Teacher's object :%s"%self.name def __repr__(self): return str(self.__dict__) def func(self): return 'wahaha' nezha = Teacher("娜扎",250) print(nezha) #打印一个对象就是调用a.__str__ print(repr(nezha)) print('>>>%r'%nezha) # a.__str__ --> object # object里有一个__str__,一旦被调用,就返回这个方法的对象的内存地址 l = [1,2,3,4,5]#实例化一个列表类的对象 print(l)
posted @ 2018-07-07 12:00  小伍555  阅读(99)  评论(0编辑  收藏  举报