组合、面向对象的内置函数、反射、异常

组合、面向对象的内置函数、反射、异常

  • 组合
  • 面向对象的内置函数(魔术方法,魔法,开头的方法)
  • 反射
  • 异常

 

一、组合

  组合就是一个对象拥有一个属性,该属性的值是另外一个对象

  解决类与类之间的代码冗余问题

    1.继承:满足什么是什么的关系,is-a的关系

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)

 

二、面向对象的内置函数

1. __init__()
2. __str__()
3. __del__()
4. __enter__()
5. __exit__()
6. __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)

 

三、反射

# 对象通过字符串来操作属性

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.异常的种类

    1)语法错误

print(123

    2)逻辑错误

a = [1, 2, 3]
a[4]

  3. 异常的作用

    增强代码的健壮性

  4. 异常的使用   

try:
    被监测代码
except 异常的类型:
    pass
except 异常的类型:
    pass
except 异常的类型:
    pass
except Exception as e:
    pass
else:
    当被监测代码没有发生异常的时候,触发的
    pass
finally:
    不管被监测的代码有没有出错,都执行

 

posted @ 2021-12-07 20:19  尤露  阅读(29)  评论(0)    收藏  举报