面向对象
组合
组合:一个对象拥有的某个属性的值是另外一个对象
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语句,必须在这个对象的类中声明enter和exit方法。
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:
# 不管被监测的代码有没有出错,都执行

浙公网安备 33010602011771号