面向对象的内置函数之str
# __str__
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
s = Student('JUNJIE', 18)
print(s) # name:JUNJIE
面向对象的内置函数之del
# __del__
"""
一个对象的产生有构造方法和析构方法
构造方法:实例化就会触发构造方法,__init__,将对象构造出来
析构方法:当一个对象用完想要删除时,就会触发析构方法,那什么是析构方法 ?
"""
class Student():
school = 'SH'
# 调用类的时候触发
def __init__(self, name, age):
self.name = name
self.age = age
# 手动执行del
# 程序执行完毕触发
def __del__(self):
print('__del__')
# self.f.close()
stu = Student('junjie', 18)
# del stu.name
print('end=》》》》》')
print(stu.__dict__) # {'name': 'junjie', 'age': 18}
"""
使用__del__之后
"""
class Student():
school = 'SH'
# 调用类的时候触发
def __init__(self, name, age):
self.name = name
self.age = age
# 手动执行del
# 程序执行完毕触发
def __del__(self):
print('__del__')
# self.f.close()
stu = Student('junjie', 18)
del stu.name
print('end=》》》》》')
print(stu.__dict__) # {'age': 18}
"""
也可以删除对象
删除对象后依旧会运行
def __del__(self):
print('__del__')
# self.f.close()
"""
面向对象的内置函数之enter / exit
class Open:
def __init__(self,name):
self.name=name
def __enter__(self):
print('出现with语句,对象的__enter__被触发,有返回值则赋值给as声明的变量')
# return self
def __exit__(self, exc_type, exc_val, exc_tb):
print('with中代码块执行完毕时执行我啊')
s = Open('junjie')
with Open('a.txt') as f:
print('=====>执行代码块')
面向对象的内置函数之call
class Foo:
def __init__(self):
pass
def __call__(self, *args, **kwargs):
print('__call__')
obj = Foo() # 执行 __init__
obj() # 执行 __call__
反射
# 对象通过字符串来操作属性
class Student():
def __init__(self, name, age):
self.name = name
self.age = age
def func(self):
print('from func')
# 1.
# getattr
stu = Student('junjie', 18)
print(getattr(stu, 'name1', None)) # 去对象stu找name1 有则返回值 如果没有就返回None
stu.func()
print(getattr(stu, 'func'))
getattr(stu, 'func')()
# 2.
# setattr
setattr(stu, 'x', 11) # 在stu对象增加一个属性x = 11
print(stu.__dict__)
# 3.
# hasattr
print(hasattr(stu, 'name')) # 看stu对象有没有属性name 如果没有返回False 反则返回True
# 4.
# delattr
delattr(stu, 'name') # 删除stu对象里的name属性
print(stu.__dict__)
异常
1. 什么是异常?
异常就是错误发生的信号,如果不对该信号做处理,那么异常之后的代码都不会执行
异常的种类:
1. 语法错误
print(123
2. 逻辑错误
# 逻辑错误尽量写到完美
a = [1, 2, 3]
a[5]
2. 为什么要用异常
增强代码的健壮性
3. 怎么用异常?
try:
被监测代码
except 异常的类型:
pass
except 异常的类型:
pass
except 异常的类型:
pass
except Exception as e:
pass
else:
# 当被监测代码没有发生异常的时候,触发的
pass
finally:
不管被监测的代码有没有出错,都执行