8.1 类和对象
一.什么是类
我们学习过基本变量类型,例如int,float,str等,它们可以表达一些简单的值,例如一个数字,一个字符,对于复杂的事物就不能描述了,例如,一个学生,一个班级。
类就是为了解决这样的问题。
什么是类呢?
简单说类可以看做是自定义的变量类型。就和int一样,你可以把类看做是复杂一点的变量类型。
首先一个类可以有多个属性,例如一个矩形类,就需要长和宽两个数值。
然后类可以有行为,例如一个汽车类,它有开车,停车这样的行为。
类是一类事物的抽象。
类的属性用来是描述这个事物 。
类的行为是这个事物的功能或动作。
类是一类事物的抽象,而对象,就是具体的某个事物。
下面是一个类Student的定义:
class Student: name="" id="" clazz=""
定义一个类很简单,先写上关键字class,然后是类的名字(通常是大写),然后冒号,接着在缩进部分定义变量,一个简单的类就定义好了,上面的name,id以及clazz都是类Student的属性。
二.类和对象
万事万物皆对象。(Everything is an object)
这是经典的《Java编程思想》的一个章节名,任何事物,都可以看做是某种类一个对象。
类和对象的关系,就是抽象和具体的关系。 两者的层面不一样:类规定有些什么属性和行为,包括它们的类型和名字;对象则是这个类具体的一个实例,它有自己的属性值。
马是一个类,这匹马就是一个对象,那匹马也是一个对象。
下面是一个类Stduent的定义,以及对象stu的创建
class Student: name="" id="" clazz=""i=9stu=Student()#给stu对象的属性赋值stu.name="张三"stu.id="AP98773938"stu.clazz="23计算机应用3班"
i是变量,根据它的整数值,此时i是整型变量。
Student是一个类,而stu就是对象,对象的地位相当于变量。
我们回到最初的变量: i=7,i是变量,7是值。这些变量类型是最基本的类型,它们可以组成更复杂的数据,从而创造一个并不存在的数据类型。
存不存在一个代表“手机”的变量类型? 不存在,但是我们可以自己创建。 类就是为解决这个问题而诞生的。
类可以看做是自定义的变量类型。对象就是类的一个变量,或者说是一个实例。在面向对象的世界里,最小的数据单元从基本变量变成了对象。
三.属性
类有很多属性,我们可以根据需要给类添加属性。下面这个一个“手机类”的定义。
class Mobile: name='' mon=''x=Mobile()# 定义一个Mobiel对象xx.name="iphone14" # 给x的name属性赋值x.mon="1980*1200" # 给x的mon属性赋值print(x.name)
name和mon这两个就是类Mobile的两个属性,又称为成员变量。
然后我们可以定义了一个Mobile类型的变量x,我们称这样的变量为对象,还可以给m的属性赋值,我们称m为Mobile的一个对象。
Mobile是抽象的,m是具体,类和对象的关系就好比:马和“这一匹马”的关系。
类定义了事物的属性和行为,而对象就是具体某一个事物,对象需要给这些属性值赋值。 例如学生是一个类,它有学号、姓名、班级这三个属性,那么某个对象这三个属性就应该有具体的值。例如某个学生张三,学号2022040511,22软件1班。
stu=Student()stu.name='张三'stu.id='2022040511'stu.clazz='22软件1班'
一个类可以有很多对象,每个对象都有它自己的属性。就好比可以有无数的变量,它的变量i和j的值是互相独立的。 对比普通变量,对象更进一步,每个对象都有自己的属性值,每个对象的行为都可能会有不同的结果。
例如下面的代码,stu和stu2是Student类两个对象,它们可以用不同的属性值,互不干扰
stu=Student()stu.name='张三'stu.id='2022040511'stu.clazz='22软件1班'stu2=Student()stu2.name='李四'stu2.id='2022080311'stu2.clazz='22网络3班'
四.对象动态添加属性
python还支持动态添加属性,例如:
class X:pass #定义类X,但里面什么属性都没有x=X() # 声明一个X对象xx.m=5 # 给x动态增加一个属性m并赋值为5x.n=6print(x.m)print(x.n)