1. 组合
组合:把另外一个类的对象属性赋值给当前对象的属性 首先要明白 什么是什么的区别 为什么要继承父类 比如三个类 老师类 学生类 课程类; 虽然老师和学生有课程 但是老师和学生是课程吗? 还是老师和同学是课程 """ is a 的关系 代表的是 继承的关系 和什么有什么的关系 就是组合 """ 所以不想继承 又想用到其他类中的属性 就需要 创建超级对象 来 获取其他类中的属性和方法 class Student: pass class Teacher: pass class cuosce: pass 案例如下: """ 1. 老师类 : 初始化属性有 name,gender,age ,evol.salary 2. 学生类 : 初始化属性有 name , gender age uid class_name 3. 课程类: name gender age course price day 4. 把类中冗余的代码写一个类 来继承 """ class Tar_Stu: def __init__(self,name,age,gender): self.name = name self.age = age self.gender = gender class Teacher(Tar_Stu): def __init__(self,name,age,gender,evol,salary,course): super().__init__(name,age,gender) self.evol = evol self.salary = salary self.course = course def ter_course(self): print('%s 老师有 %s 课 ' % (self.name,self.course)) class Student(Tar_Stu): def __init__(self, name, age, gender,uid,class_name,course): super().__init__(name, age, gender) self.uid = uid self.class_name = class_name self.course = course def stu_course(self): print('%s 同学有 %s 课 ' % (self.name,self.course)) class Course: def __init__(self,course,price,day): self.course = course self.price = price self.day = day def course_time(self): print('%s 课程 %s 钱 %s 天' % (self.course,self.price,self.day)) terchar = Teacher('huang',28,'male','10级',15000,'python') # 老师对象 stu = Student('lu',88,'male',88,'九五班','python') # 学生对象 python = Course('python',22000,'180') # 课程对象 linux = Course('linux',25000,200) # 课程对象 terchar.tar_course = python # python 对象会赋值给 tar_course terchar.tar_course.course_time() # 调用的时候 调用的对象.被赋值的名字.方法即可 完成了不用继承也可以用其他类 stu.stu_course = linux stu.stu_course.course_time() stu.stu_course = [python,linux] # 可以用列表来装多个 赋值对象 for i in stu.stu_course: # 调用的时候 for 循环即可 i.course_time()
2. 反射
"""反射:就是通过字符串的形式来操作对象的属性""" 四个内置函数: getattr: 获取属性 ##### 用的最多 setattr:设置属性 hasattr:判断是否有某个属性 delattr:删除 class Student(): school = 'SH' def __init__(self,name, age): self.name=name self.age = age def func(self): print('from func') def index(self): print('from index') stu = Student('kevin', 20) # 1. 获取属性 """当你查询的属性不存在的时候,如果给了第三个参数,就返回第三个参数""" """如果你给了第三个参数,查询的属性也存在,那就直接返回属性对应的值,默认值就没用了""" # res=getattr(stu, 'school1', 666) # SH 666 res=getattr(stu, 'func1', stu.index) # 获取类中的方法 第一个参数是 对象 第二的参数是 类中的方法 没有找到的情况下 就返回第三个默认值 print(res()) ## 设置 setattr(stu, 'x', 666) # 类中有这个属性就修改 没有就增加 print(stu.__dict__) ### hasattr 判断有没有这个属性 返回布尔值 print(hasattr(stu, 'func')) if hasattr(stu, 'func'): getattr(stu, 'func')() else: ... ## delattr 删除属性 没有就报错 有就删除 delattr(stu, 'name1') del stu.name print(stu.__dict__)
标签:__,反射,name,组合,course,抛出,self,stu,age From: https://www.cnblogs.com/lchengshao/p/17755892.html