1. 编程学习网 > 编程教程 > Python教程 > python类与对象

python类与对象

类与对象

从现在开始,我们从创建类和对象开始进入面向对象编程,之前提过,类是对象共有的属性和方法的抽象,对象是类的实例,所以要想创建一个对象必须先有一个类。

1.类的创建

关键字class是类的标志,也是定义一个类的语句。创建类就是用class关键字加上一个使用标识符命名规范命名的类名,再加一个冒号。

这就是一个类的基本结构,不过这只是一个空类,它什么也做不了。从格式上看类的定义和函数有点像,在类里同样常常使用一对三引号的注释对这个类进行描述。不过我们之前说过,函数是包含在类里的,在类里,函数都叫做方法,类里的变量可以理解为属性。所以一个比较完整的类应该是这样的:

这便是定义了一个比较完整的类。
在这个类中,定义了一个变量a和三个方法,这里的变量a在所有的方法之外,它叫做类变量,它不是必须的,当一个类中有类变量时,它将在这个类所派生的所有对象之间共享,我们可以使用“类名.”的方式调用它,如第8行。
我们发现类里面的方法和我们以前学习的函数不太一样,在每一个函数里都有一个self参数,我们暂且照着写,理解的时候先把它忽略掉,当做不存在,像以前学习的函数一样来对待。
首先是一个特殊的方法,‘__init__()‘,它称为类的构造方法也叫初始化方法,它里面的变量,称为实例变量,就是我们所说的类的属性。实例变量只能存在于构造方法里面,因为当一个类派生出一个对象时,会自动调用构造方法,但不会自动调用其它方法,当一个对象自动调用构造方法时,这些实例变量会接收所创建的对象所传的参数,实例变量代表的属性也就成为该对象特有的属性。
我们反复强调,类是对象共有的属性和方法的抽象,刚介绍了属性就是构造方法里面的变量,那么接下来就要说方法了,类中的方法很容易,就是在类中根据该类的特点直接定义函数。在类中的方法,我们可以访问类变量(必须加上类名.)和实例变量(必须加上self.),然后根据需要书写函数体。
在面向对象编程中写一个大的项目时,往往会把一个类单独放在一个.py文件里。
对于第一次接触面向对象编程的同学来说,可能比较难理解这些内容,不过没关系,通过后面的实验慢慢的就会理解。

2.创建实例对象与访问

定义一个类后,就可以使用该类创建出无数个实例对象,实例对象的命名同样需要符合标识符规律,方法是:

这里需要传的参数对应于构造方法里面的实例变量。
比如这样的一个例子:定义一个学生类,共有属性包括姓名和学号,共有方法:爱学习,
然后创建两个对象:小明,学号1001;小华,学号1002.

在第7和第8行中我们使用定义好的学生类创建了名为Ming和Hua的两个实例对象,方法很简单。
对于一个类来讲也可以只有共有属性和共有方法其中的一个,当没有共有属性只有方法时,就不需要构造方法__init__(),创建对象时也不需要传递参数,但是有构造方法时不传参会报错。
创建一个对象后,我们想要访问它的属性和方法,可以使用”对象名.”的方式。
比如我们想访问Ming对象中的name属性和fun()方法。

此时运行程序,输出结果:
xiaoming
xiaoming爱学习,他的学号是1001
可以看到类里的共有属性和方法,在创建实例对象后,输出了符合实例对象自身特点的语句。

3.类变量与实例变量测试

我们通过一个例子来测试一下类变量和实例变量的区别。

输出结果:
类变量a: 101 实例变量num: 101
类变量a: 102 实例变量num: 101
类变量a: 103 实例变量num: 101
 
这个例子中,定义了一个test类,在类中,定义了一个值为100的类变量a,一个带有实例变量num的构造方法和一个类共有方法。然后创建了3个实例对象,为了方便观察传入了与类变量相同的值100,在类的共有方法中,分别对类变量和实例变量做相同加1操作,然后输出他们的值,在最后的打印结果中,可以发现对于每个对象来说传入的实例变量是他们自己独有的,只会在调用fun()函数时执行依次num+1的操作,所以每个对象都会输出相同的值101,但是类变量确实所有对象共有的,每创建一个类,调用了共有方法之后类变量都会执行一次加一操作,所以就会得到上述结果,即a的值每次加一。
等我们后面讲了self后,大家就会更加深刻地理解这一点了。



本文由IT教学网整理发布,转载请注明出处:http://www.itjx.com/jiaocheng/Python/2020/0118/529.html

联系我们

在线咨询:点击这里给我发消息

咨询电话:400-998-2681

工作时间:7*24小时无休