python 面向对象之组合、魔法、反射
2021/12/7 17:46:50
本文主要是介绍python 面向对象之组合、魔法、反射,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录- 1.组合
- 面向对象的内置函数(魔术方法,__开头的方法)
- 反射(掌握四个方法)
- 异常
1.组合
1.什么是组合:一个对象拥有一个属性,该属性是另一个对象。 2.组合的作用:解决类与类之间的代码冗余问题。与继承起到类似的效果。 3.组合的举例: # 组合:对象有一个属性,属性是另一个对象 class People(): def __init__(self, name, age, gender): self.name = name self.age = age self.gender = gender class Course(): def __init__(self, name, price, period): self.name = name self.price = price self.period = period course = Course('python', 20000, '6month') # 对象 class Student(People): def __init__(self, name, age, gender, course=None): if course is None: course = [] self.course = course super().__init__(name, age, gender) stu = Student('qql', 20, 'female', course) # 其中一个属性是对象 print(stu.__dict__) print(stu.course.name)
面向对象的内置函数(魔术方法,__开头的方法)
1.内置函数也称为魔术方法,简称魔法,也就是双下划线__开头的方法。 2.类体中常见的几个内置函数: __init__ 调用类的时候自动触发 __str__ 输出对象的时候会自动触发(比如打印对象、主动报异常raise Except('')),返回值必须是字符串 __del__ 两个触发场景:第一个是手动调用执行,第二是程序执行完毕后自动触发。两个场景二选一。 __call__ 对象加括号的时候自动触发 3.魔法应用: class Student(): school = 'SH' def __init__(self, name, age,gender): # 调用类就会触发 self.name = name self.age = age self.gender = gender # def tell(self): # print('name: %s, age: %s' % (self.name, self.age)) def __str__(self): # 打印对象会自动触发 return 'name: %s' % self.name def __del__(self): # 手动调用执行或者程序执行结束后触发 print('del') del stu.gender def __call__(self, *args, **kwargs): # 对象加小括号会触发 print(111) stu = Student('qql', 19, 'female') print(stu.name) # qql print(stu.__dict__) # {'name': 'qql', 'age': 19, 'gender': 'female'} print(stu) # name: qql # stu.__del__() # 如果手动调用执行了,程序结束后自动触发找不到删除项会报错 print(stu.__dict__) # {'name': 'qql', 'age': 19} 程序结束后 stu() # 对象加括号会触发 __call__ 方法
反射(掌握四个方法)
1.什么是反射:通过字符串的形式操作对象的相关属性。在python中一切都是对象,都可以使用反射。 2.四个反射的方法: __getattr__ 查找属性或者方法 __setattr__ 给对象修改或者添加属性 __delattr__ 删除属性 __hasattr__ 查看名称空间中是否存在名字,返回布尔值 3.反射应用: class Student(): school = 'SH' def __init__(self, name, age,gender): # 调用类就会触发 self.name = name self.age = age self.gender = gender def info(self): print(111) stu = Student('qql', 19, 'female') # 实例化对象 print(getattr(stu, 'name', None)) # 用过字符串要到对应属性的属性值 getattr(stu, 'info')() # 通过字符串要到对应方法名加括号调用 # print(getattr(stu, 'name111')) # 如果字符串不存在对应属性名,会报错 setattr(stu, 'course', 'python') # 如果字符串对应的属性名存在就修改属性值,不存在就新增属性 print(stu.__dict__) # 查看对象的名称空间 delattr(stu, 'course') # 如果字符串不存在对应属性名,会报错,如果存在会直接删除对应属性 print(stu.__dict__) # 查看对象的名称空间 print(hasattr(stu, 'name')) # 查看对象名称空间中是否有对应名字,返回布尔值
异常
1.什么是异常:异常就是错误发生的信号,当遇到错误就会抛出异常,如果不处理该错误,就会阻塞后面的代码无法执行。 2.异常的分类: 语法错误:出现应该立刻处理 逻辑错误:出现了应该尽快处理 3.为什么要用异常? # 异常结构 try: 被监测的代码 except 错误类型2 as e: # e即报错的完整信息 对应处理办法 except 错误类型2 as e: 对应处理办法 except 错误类型3 as e: 对应处理办法 ... else: 以上错误都不出现的时候走这里 finally: 无论有没有出现错误都走这里 4.# 制造异常 class MyException(BaseException): def __init__(self, msg): self.msg = msg def __str__(self): return self.msg # raise 也是输出的一种,会自动触发__str__ raise MyException('我出现异常了')
这篇关于python 面向对象之组合、魔法、反射的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-03用FastAPI掌握Python异步IO:轻松实现高并发网络请求处理
- 2025-01-02封装学习:Python面向对象编程基础教程
- 2024-12-28Python编程基础教程
- 2024-12-27Python编程入门指南
- 2024-12-27Python编程基础
- 2024-12-27Python编程基础教程
- 2024-12-27Python编程基础指南
- 2024-12-24Python编程入门指南
- 2024-12-24Python编程基础入门
- 2024-12-24Python编程基础:变量与数据类型