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)
析构方法是在释放对象的时候调用,可以在里面进行一些释放资源的操作,一样不需要显示调用,系统会默认去执行。
析构方法也支持重载。
更多的内置方法:
完整类用法:
输出结果为:
- class类的定义(一) python
- python定义类(class)的语法,
- python 文件中定义同名的class
- Javascript定义类(class)的方法
- JS 系列一: Javascript 定义类(class)的三种方法
- [C++]类的定义 class
- Python 摸索(一) class的初步学习
- C#中,定义类(Class)的一些原则
- Javascript定义类(class)的三种方法
- Javascript定义类(class)的三种方法
- Javascript定义类(class)的三种方法
- Javascript定义类(class)的三种方法
- Javascript定义类(class)的三种方法
- Javascript定义类(class)的三种方法
- Javascript定义类(class)的三种方法
- Javascript定义类(class)的三种方法
- Javascript定义类(class)的三种方法
- 【javascript】Javascript定义类(class)的三种方法
- ios-消息中心 NSNotificationCenter
- 通过监听logcat实现APK程序卸载二次确认
- qt qstring和float的相互转换
- 持续整理APPLE GCC关键字
- windows的shellcode编写高级技巧
- class类的定义(一) python
- c指针和c++引用
- 浅析android应用增量升级
- 前端文件优化方案
- OCP-1Z0-053-V13.02-219题
- 有关iis hack的一些方法整理
- GPS-Graph Processing System集群安装笔记(一)
- 二叉树的创建及遍历(求问如何实现没有规律的二叉结点树的创建?)
- Android 中fill_parent、wrap_content和match_parent的区别