异常与错误
python异常处理的模板是什么?
try:
#可能发生异常的语句
except Ex1:
#发生异常Ex1时要执行的语句
excpet (Ex2,Ex3):
#发生异常E2或E3时要执行的语句
except:
#发生其他异常时要执行的语句
else:
#无异常时要执行的语句
finally:
#不管是否发生异常,都要执行的语句
#如文件、数据库、图形句柄资源的释放
断言
在数据分析、数据科学中,断言(Assertion)主要用于“设置检查点”
assert expression [.arguments]
expression:条件表达式
argument:断言内容
a = 1
b =0
assert b!=0,"分母不能为0"
输出:
---------------------------------------------------------------------------
AssertionError Traceback (most recent call last)
<ipython-input-8-f4aa5d2b62fd> in <module>
1 a = 1
2 b =0
----> 3 assert b!=0,"分母不能为0"
AssertionError: 分母不能为0
面向对象编程
在类中如何定义特殊函数?
#初始化函数
__init__()
#析构函数
__del__()
#构造函数
__new__()
#类方法
@classmethod
#静态方法
@staticmethod
如何定义属性和方法的可见性?
- private:命名以两个下划线开始
- protected:命名以一个下划线开始
如何定义类之间的继承关系?
- 对象名-类名(初始化值) class Teacher(Person) #Teacher继承了Person类
如何方位类中的属性和方法?
- 普通属性和方法:通过对象名
- 静态方法和类方法:直接通过类名
- 构造函数、析构函数、初始化函数:解释器自动调用
@property装饰器
将方法或者函数以属性的形式调用
class Student:
__name = "Zhang"
age = 17
@property
def get_name(self):
print(self.__name)
st = Student()
st.get_name
cls与self的区别
1、self表示一个具体的实例本身。如果用了staticmethod,那么就可以无视这个self,将这个方法当成一个普通的函数使用。
2、cls表示这个类本身。
new与init的区别和联系
当__new__()中的return语句执行之后才能执行__init__()
执行函数__new__()后生成的是“对象”;执行函数__init__()后生成的是“实例”
class Student:
name = "wang"
__age = 10
def __new__(clf,name,age):
print("new调用")
def __init__(self,name,age):
print("init调用")
self.name = nage
self.age = age
def sayHi(self):
print(self.name,self.age)
s1 = Student("xiao",25)
new调用
print(s1)
None
s1.sayHi()
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-40-f96aac634073> in <module>
----> 1 s1.sayHi()
AttributeError: 'NoneType' object has no attribute 'sayHi'
修改
class Student:
name = "wang"
__age = 10
def __new__(cls,*args,**kwargs):
print("new调用")
return object.__new__(cls)
def __init__(self,name,age):
print("init调用")
self.name = name
self.age = age
def sayHi(self):
print(self.name,self.age)
s1 = Student("xiao",25)