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

对象的组合:

  把一个对象作为另一个对象的属性值。

  继承:子类会继承父类的所有属性和方法,

  为什么要用组合,而不用继承呢?

  例:

  class People():

    def __init__(self,name,age,gender):

      self.name = name

      self.age = age

      self.gender = gender

  class Student(People):

    def __init__(self,course=None):

      if course == None:

        self.course  = []

      self.course = course

  stu = Student('ly',18,'male',['python'])

  这样产生的对象stu就继承了People的所有属性和方法

  但是如果course的属性有好多个呢?这样就不方便了

  这时不防再另外写个course的类:

  class Course():

    def __init__(self,name,price):

      self.name = name

      self.price = price

  python = Course('python',12000)

  这样就产生了python这个课程对象

  可以把这个对象,赋值给stu,这样stu不就有课程了吗?

  stu.course = python

  要查看stu的课程属性:

  stu.course.name

  stu.course.price

 

内置函数(魔法方法):

  类的内置函数,是在调用类时自动触发的方法,也称为魔法方法。

  主要的内置函数有:

  1、__init__()  实例化对象的时候自动触发

  2、__str__()  打印的时候自动触发,返回值只能是 字符串

  3、__del__()  删除方法或发生时触发,程序执行结束时也会触发

  4、__enter__()  __exit__()  with 的上下文管理器

  5、__call__()  对象加()时自动触发

  def __str__(self):

    return 'name:%s' % self.name

    # return 123 报错 返回值只能是字符串 

    stu = Student('ly', 20)

    print(stu) # name:ly 就相当于打印 print(stu.__str__())

 

反射:

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

  主要的反射方法有:

  __getattr__()

  __delattr__()

  __hasattr__()

  __setattr__()

  

  stu = Student('ly',18,'male')

  # 1. getattr

    print(getattr(stu, 'name1', None)) # None 相当于 stu.name 第一个参数传对象 第二个传属性 第三个传找不到的返回结果

    stu.func() # from func 直接调用

    print(getattr(stu, 'func')) # 通过字符串调用 <bound method Student.func of <__main__.Student object at 0x0000020BB6FBBD30>>

    getattr(stu, 'func')() # from func 必须掌握

  # 2. setattr

    setattr(stu, 'x', 123) # 第一个传对象 第二个传属性名 第三个传属性值

    print(stu.__dict__) # {'name': 'ly', 'age': 18, 'x': 123}

 

  # 3. hasattr

    print(hasattr(stu, 'name')) # True 确认对象中是否有属性 第一个传对象 第二个传属性

    print(hasattr(stu, 'name1')) # False

 

  # 4. delattr

    delattr(stu, 'name') # 删除 第一个传对象 第二个传属性

    print(stu.__dict__) # {'age': 18}

    # 类也可以使用

    print(getattr(Student, 'school'))

 

异常:

  程序运行中出现的错误情况

  异常的种类:

    1、语法错误

    2、逻辑错误

  异常的捕获:

  try:

    pass

  except 异常类型:

    pass

  except 异常类型:

    pass

  except Exception as e: # 万能异常 不管什么类型错误 都可以接收

    pass

  else:

    pass # 异常不出现时执行

  finally:

    pass  #有没有异常都要执行

 

  自定义异常捕获:

    class Myerror(BaseException):

      pass

    自定义异常类,都要继承BaseException类

  

  

 

posted on 2021-12-07 20:40  秋不语  阅读(66)  评论(0)    收藏  举报

导航