类在面向对象编程中是很基础的概念,其最基本的功能就是创建新的数据类型,另外还有继承功能,就是可以从一个类A派生出一个新的类B,且类B会继承类A的所有属性。
定义一个空类,即一个什么属性都没有的类,一个什么事情也做不了的类:
class 类名:
pass
类名要求和变量名一样,可以由字母、数字和下划线组成,一般首字符是大写的字母,对于长度没有限制。
类定义完之后便可以使用该类来创建实例,方法如下:
实例对象名 = 类名()
类的属性:
类本身也是一个对象,它也有自己的属性。类的属性一般表示类的相关内容,如类的版本和作者等信息。类的属性的定义是在类里面直接定义一个变量即可:
class Student:
student_version=1.0
student_author='python3.0'
print(Student.student_author,Student.student_version)
类的属性的访问方法是“类名.属性名”。这些属性也是可以修改的,如可以修改Student类的version属性。
初始化函数和销毁函数
初始化函数是用来初始化实例对象的。每次构造一个实例对象时,都会调用该类的初始化函数。在该初始化函数中可以初始化实例对象,或者更新类的某些属性,如该类构造出来的实例对象的个数。初始化函数也可以带参数,通过不同参数来构造不同的实例对象。初始化函数的样式如:__init__(self,参数列表)
![](https://img.haomeiwen.com/i24337984/d19824b06cb02bbd.png)
【注】在Python中定义多个初始化函数是没有意义的,因为最终只有一个初始化函数有效,即最后定义的初始化函数会覆盖所有前面定义的初始化函数。
销毁函数在对象被销毁时调用,它不可以有参数。一般使用del()来明确销毁某个对象。销毁函数的定义方法如:__del__(self)
![](https://img.haomeiwen.com/i24337984/53b2b24fe5c6bafa.png)
如果定义的销毁函数带有除self之外的参数,那么在销毁对象时会导致异常。
类属性和实例对象属性的关系
实例对象是基于类创建出来的,所以对象会继承类的属性。通过下面的例子可以看到对象自动继承了类的所有属性:
![](https://img.haomeiwen.com/i24337984/3c840075786ac6a2.png)
【注】这些从类继承得到的对象,并不是复制下来的,它们是指向类的属性的。通过看id:
print(id(student_a.version),id(Student.version))#输出结果:2419351265944,2419351265944,他们是同一个对象
还可以通过修改类属性来观察实例继承的属性也发生了变化。
但是修改对象的属性不会反映到类的属性上。如下:修改了对象的属性version,但是类Student的version属性是没有变化的。
class Student:
version ='3.0'
author ='python3.0'
def __init__(self):
print('version : %s,author : %s' %(Student.version,Student.author))
student_a = Student()
student_a.version ='9.9'
print(student_a.version,Student.version)
print(id(student_a.version),id(Student.version))
输出结果如下:
version : 3.0,author : python3.0
9.9,3.0
2355262223336,2355261383320
比较特殊的情况是列表数据类型,它们可以在不改变id的情况下,发生内容的改变。如调用了append()接口函数,该列表的id不会发生变化,但其内容发生了变化。
对于这种类型的属性,如果id没有发生变化,修改对象从类继承来的属性会导致类属性的值的变化。
网友评论