Python面向对象和异常

一、Python类和对象简述

1,类:具有相同的属性和方法的对象的集合

2,对象:万物皆对象对象定义

对象使用:类名(参数) 可以把他赋给一个变量,这样好调用方法和属性

我们可以根据对象,属性来创建属性但这个属性只属于本对象,可以self来调用(self代表本类和Java的this差不多)但这样直接考.出来的属性并不实用,我们一般都是在init函数自己定义属性,这样全局类都可以实用了

Python面向对象和异常

3,类的定义:

class 类名:

属性

def 方法():

二、Python类中常用的函数和方法

方法

1,def new(cls):用来创建对象,但必须有返回值 (cls代表本类)和Java中的无参构 造差不多

2, def init(self,参数): 用来初始化的方法,用来给参数赋值的:(也可以说成Java中的有参构造)
Python面向对象和异常

3,def str(self):重写父类objectstr方法用来把对象属性进行显示输出,和Java的tostring一样

补充(类函数)

init : 构造函数,在生成对象时调用
del : 析构函数,释放对象时使用
repr : 打印,转换
setitem : 按照索引赋值
getitem: 按照索引获取值
len: 获得长度
cmp: 比较运算
call: 函数调用
add: 加运算
sub: 减运算
mul: 乘运算
div: 除运算
mod: 求余运算
pow: 乘方

4,def del(self):自动销毁方法,当对象没有引用的时候,程序自动调用__del__()

Del 引用也可以自动调用__del__(self)方法
5,__方法名(self):私有方法只有本类可以访问

函数

1,getrefcount(对象) 返回有多少个对象引用

三、继承

1,继承:子类继承父类,子类可以拥有父类的属性和方法,简化代码,

当生成子类对象时,先初始化父类对象,使用如果父类有__init__方法并且有属性,要通过子类的构造赋值一个类可以有多个类和父类

在子类调用父类属性的时候,可以有4种调用方式

1, 父类.属性

2, self.属性

3, 父类.init(self,参数)

4, super(父类,self).init(所有参数)

一个基础体系

1,父类()
子类(父类)
三代继承:子类初始化方法需要祖父、父类及自己的属性,可以调用父类的初始化方法传参,可以重写父类的方法
构造的顺序依然先构造祖父类,再构造父类,最后构造自己
类继承object
2,方法重写:
如果子类重写的方法想调用父类的方法时,在子类方法中:父类.方法(self)或super().父类方法()
3,多继承:

类同时继承多个父类,class C(A,B),当有AB均有相同方法,调用前面的

(注意:如果多继承用的传参方式不同可能结果不一样

两段代码运行结果不一样:
原因:第一个使用父类名调用,相当于Parent重写了2次;
第二个使用super调用,相当于Parent重写了1次所以导致两次结果不一样,第一次那样调用是存在问题的,
1、super().__init__相对于类名.init,在单继承上用法基本无差
2、但在多继承上,super保证每个父类只会被重写一次,如果使用类名调用时,就会出现多次调用
3、多继承时,使用super方法,对父类的传参数,应该是由于python中super的算法导致的原因,必须把参数全部传递,否则会报错
4、多继承时,相对于使用类名.__init__方法,要把每个父类全部写一遍, 而使用super方法,只需写一句话便执行了全部父类的方法,这也是为何多继承需要全部传参的一个原因。

四,多态

多态

类具有继承关系,并且子类类型可以向上转型看做父类类型,如果我们从 Person 派生出 Student和Teacher ,并都写了一个 whoAmI() 方法:
Python面向对象和异常

在一个函数中,如果我们接收一个变量 x,则无论该 x 是 Person、Student还是 Teacher,都可以正确打印出结果:
Python面向对象和异常

这种行为称为多态。也就是说,方法调用将作用在 x 的实际类型上。s 是Student类型,它实际上拥有自己的 whoAmI()方法以及从 Person继承的 whoAmI方法,但调用 s.whoAmI()总是先查找它自身的定义,如果没有定义,则顺着继承链向上查找,直到在某个父类中找到为止。

由于Python是动态语言,所以,传递给函数 who_am_i(x)的参数 x 不一定是 Person 或 Person 的子类型。任何数据类型的实例都可以,只要它有一个whoAmI()的方法即可:

Python面向对象和异常

1,类属性:属于类的成员,属于对象共有的

2,类方法:在方法上添加@classmethod
Python面向对象和异常

3,静态方法:
Python面向对象和异常

他不属于类也不属于对象

4,工厂类:有一些子类,在一个类中生成很多对象,简单工厂模式

Pass

五、常用的函数

1,对象排序

2,单例模式

单例模式:有且仅有一个对象
Python面向对象和异常

六、异常
Python面向对象和异常

1, 捕捉异常可以使用try/except语句

如果有异常会进入except里面

2, Else是没有异常会执行的语句

3, Finally是不管这样都执行