面向对象

组合

组合:一个对象拥有的某个属性的值是另外一个对象

class People():
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender

class course():
    def __init__(self,name,period,price):
        self.name = name
        self.period = period
        self.price = price

python = course('python','3 mon','2000')


class Student(People):
    pass

class Teacher(People):
    def __init__(self, name, age, gender,level):
        self.level = level
        super().__init__(name, age, gender)
    def test_score(self,score):
        stu.score = score
        print('%s学生的成绩是%s' %(stu.name,score))

stu = Student('suzy',17,'famel')
# 对象的某一个属性是另一个对象
stu.courses = python
print(stu.courses.price)


面向对象的内置函数

1.init() 调用类的时候触发

2.str() 打印对象的时候自动触发的函数,print功能打印的就是它的返回值,该方法必须返回字符串类型

class People:
  	def __init__(self,name,age):
      	self.name = name
        self.age = age
    def __str__(self):
      	return self.name,self.age
people1 = People('tony',19)
print(people1)  # 触发people1.__str__(),拿到返回值后进行打印

3.del 会在对象被删除的时候自动触发

​ 因为 Python 有自动的垃圾回收机制,能自动将不需要使用的实例对象进行销毁,所以当一个对象只占用应用程序级资源时,完全没必要为对象定制__del__方法,但在产生一个对象的同时涉及到申请系统资源(比如系统打开的文件)的情况下,关于系统资源的回收,Python的垃圾回收机制便派不上用场了,需要我们为对象定制该方法,用来在对象被删除时自动触发回收系统资源的操作。

class MySQL:
  	def __init__(self, ip, port):
      	self.conn = connect(ip, port)  # 伪代码,发起网络连接,需要占用系统资源
    def __del__(self):
      	self.conn.close()  # 关闭网络连接,回收系统资源
obj = MySQL('127.0.0.1', 3306)  # 在对象obj被删除时,自动触发obj.__del__()

4.__call__对象加括号自动触发

class Foo:
    def __init__(self):
        pass
    def __call__(self, *args, **kwargs):
        print('__call__')

obj = Foo() # 执行 __init__
obj()       # 执行 __call__

5.enter()和__exit__(),实现文件上下文管理

​ 操作文件的时候,叫做上下文管理协议,即with语句,为了让一个对象兼容with语句,必须在这个对象的类中声明enterexit方法。

def __enter__(self):
  	print('出现with语句,对象的__enter__被触发,有返回值则赋值给as声明的变量')
    return 123
def __exit__(self,exc_type):
		print('with中代码块执行完毕时执行')

反射

反射就是对象通过字符串来操作属性,反射本质就是使用内置函数,其中反射有以下四个内置函数

1.getattr:根据字符串去获取obj对象里的对应的方法的内存地址,加括号即可执行

2.setattr:通过setattr将外部的一个函数绑定到实例中

3.hasattr:判断一个方法是否存在于这个类中

4.delattr:删除一个实例或者类中的方法

  • 反射在模块中的使用
  • 反射机制

反射就是通过字符串的形式,导入模块;通过字符串的形式,去模块寻找指定函数,并执行。利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动!

异常

1.什么是异常

​ 异常就是错误发生时的信号,如果不对该信号做处理,那么异常之后的代码都不会执行

​ 异常的种类:

​ 1.语法错误

​ 2.逻辑错误

2.怎么用异常

try:
              # 被监测代码
        except 异常的类型:
                  pass
          except 异常的类型:
                  pass
          except 异常的类型:
                  pass
        except Exception as e:
                  pass
        else:
              # 当被监测代码没有发生异常的时候,触发的
                  pass
        finally:
               # 不管被监测的代码有没有出错,都执行   
                  
posted @ 2021-12-07 20:36  skuukzky  阅读(40)  评论(0)    收藏  举报