面向对象进阶版

面向对象进阶版

  ·  组合

  ·  面向对象的内置函数

  ·  反射

  ·  异常

  一、组合

    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:
               不管被监测的代码有没有出错,都执行   

==================今天的内容就到这里了,我们下次再见================

posted @ 2021-12-07 16:41  Roseblacko  阅读(26)  评论(0编辑  收藏  举报