面向对象进阶版
面向对象进阶版· 组合 · 面向对象的内置函数 · 反射 · 异常 一、组合 1.什么是组合? class People(): school = 'SH' def __init__(self, name, age, gender, ): self.name = name self.age = age self.gender = gender class Admin(People): pass class Course(): def __init__(self, name, period, price, ): self.name = name self.period = period self.price = price python = Course('python', '6mon', 10000) linux = Course('linux', '5mon', 20000) class Student(People, Course): def __init__(self, name, age, gender, course=None): if course is None: course = [] self.courses = course super().__init__(name, age, gender, ) def choose_course(self, stu_obj, course): stu_obj.courses.append(course) 二、面向对象的内置函数面向对象内置函数很多,常用内置函数有以下几个:__init__(),__str__(),__del__(),__enter__(),__exit__(),__call__()..... class Student(): school = 'SH' # 调用类的时候触发 def __init__(self, name, age): self.name = name self.age = age def tell(self): print('name: %s, age: %s' % (self.name, self.age)) # 打印对象的时候,自动触发的函数 # 返回值只能是字符串 def __str__(self): return 'name:%s' % self.name # return 123 # 1. 手动执行del # 2. 程序执行完毕触发 def __del__(self): print('__del__') self.f.close() # 对象加括号自动触发 def __call__(self, *args, **kwargs): print('__call__') stu = Student('ly', 20) 三、反射反射:反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。 其有四种方法:getattr、setattr、hasattr、delattr 1. getattr print(getattr(stu, 'name1', None)) # stu.name stu.func() print(getattr(stu, 'func')) getattr(stu, 'func')() # 必须掌握 2. setattr setattr(stu, 'x', 123) print(stu.__dict__) 3. hasattr print(hasattr(stu, 'name')) 4. delattr delattr(stu, 'name') print(stu.__dict__) 四、异常1.什么是异常? 异常就是错误发生的信号,如果部队该信号做处理,那么异常之后的代码都不会运行 异常的种类:语法错误、逻辑错误 2.为什么要用异常 增强代码的健壮性 3.怎么用异常? try: 被监测代码 except 异常的类型: pass except 异常的类型: pass except 异常的类型: pass except Exception as e: pass else: # 当被监测代码没有发生异常的时候,触发的 pass finally: 不管被监测的代码有没有出错,都执行 ==================今天的内容就到这里了,我们下次再见================ |