class类的定义(一) python

来源:互联网 发布:b站道士 知乎 编辑:程序博客网 时间:2024/05/16 01:07

先介绍一下各个名词:

类(class):从编程语言看,类就是一种模板,定义一个类相当于定义一个数据类型以及相关的函数,是一个抽象的物种。

对象(object):对象是一个类的实例,是一个具体的个体。

实例(instance):其实是类和对象的关系,即类是一个抽象的概念,对象是一个具体概念。实例就是把抽象的类变为具体的对象。

实例属性(instance attribute):和对象绑定的属性,只属于某个特定的对象,每个不同的实例都有只属于自己的实例属性。

实例方法(instance method):和对象绑定的函数的集合。 

类属性(classattribute):属于一个类中所有对象的属性,不会只在某个对象上发生变化  

类方法(classmethod):那些无须特定的对象,从属于类的函数。
类变量:定义在类体中的变量

实例变量:在类的方法中定义的变量


(一)类的定义

我们会把同类的函数,变量打包到一个包里面,这个包就是类。他其实可以比作是某种”集合或种类“的描述,他以class开始,后面跟着类名。类是以具体的东西为模板,譬如人类,动物类,家具等,他里面的函数是对这个类进行操作,如人类说话,动物捕猎,家具损坏等。


因为类拥有属性(成员变量)和功能(也称之为方法即成员函数),属性即类本身的一些特性,如人类有名字、身高和体重等属性;功能则是类所能实现的行为,如人类拥有吃饭、走路和睡觉等功能。

所以把“人类”看作一个类,他的属性有名字,功能有说话,则“人类”这个类定义为:


当”人类“这个类定义完之后,就产生了一个全局类对象。而类对象支持两种操作:引用和实例化。引用是通过类对象去调用类中的属性或者方法,而实例化则是产生一个类对象的实例即实例对象。

引用操作是通过” 人类.name“来访问,而 “人类”就是类对象。

实例化操作是通过”你 = 人类()“来访问,这样就产生了一个人类的实例对象”你“。此时也可以通过实例对象”你“ 来访问,即 "你.name”


使用类的时候,我们要先具体化他,即把种类变成个体。例如把人类变成你我他中的一个个体;把动物变成大象或者猴子的一种。

这个具体化的类,就变成了对象(object),然后我们再使用对象(例如”你“这个个体)的函数来进行相应的操作。


下面用人类这个类定义出对象,即每个具体的人——你、我、他。



最后输出的结果为:




(二)公有属性和私有属性

在python中,我们是以命名方式来区分的:

属性名前有2个下划线“—”,则该属性为私有属性;否则为共有

方法名前有2个下划线“—”,则该方法为私有方法;否则为共有

共有属性或者方法是可以直接在类外面,通过对象名来进行访问,而私有属性或者方法是不能再类外通过对象名访问。


(三)方法

Python的方法分为类方法、实例方法和静态方法

类方法和静态方法都可以被类和类实例调用,类实例方法仅可以被类实例调用

类方法的隐含调用参数是类;而类实例方法的隐含调用参数是类的实例;静态方法没有隐含调用参数。


实例方法一定要以self为他的第一个参数,为了便于理解,我们可以把“self”当做是C++中的this;

类方法则是以cls为第一个参数,需要在方法定义上面加上注解@classmethod,便于和实例方法区别

静态方法,需要在方法定义上面加上注解@staticmethod,此时方法参数中不加self指针

除了类方法和静态方法之外,其他函数的第一个参数都应该是self


输出结果为:


(四)类中内置的方法

在python中有一些内置的方法, 这些方法的命名都比较特殊(以2个下划线开始,并且以2个下划线结束),其中最常用到的方法是:构造方法和析构方法

1.构造方法 __init__(self, ...)

构造方法是在生产对象时调用,可以用来进行一些初始化的操作,不需要显示去调用,系统会默认去执行。

构造方法支持重载,如果用户自己没有重新定义构造函数,系统就自动执行默认的构造方法。


2.析构方法__del__(self)

析构方法是在释放对象的时候调用,可以在里面进行一些释放资源的操作,一样不需要显示调用,系统会默认去执行。

析构方法也支持重载。

更多的内置方法:



完整类用法:


输出结果为:






原创粉丝点击