面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。

仍以Student类为例,在Python中,定义类是通过class关键字:

classStudent(object):pass

class后面紧接着是类名,即Student,类名通常是大写开头的单词,紧接着是(object),表示该类是从哪个类继承下来的,继承的概念我们后面再讲,通常,如果没有合适的继承类,就使用object类,这是所有类最终都会继承的类。

定义好了Student类,就可以根据Student类创建出Student的实例,创建实例是通过类名+()实现的:

>>> bart =Student()>>>bart<__main__.student object at>

>>>Student

可以看到,变量bart指向的就是一个Student的实例,后面的0x10a67a590是内存地址,每个object的地址都不一样,而Student本身则是一个类。

可以自由地给一个实例变量绑定属性,比如,给实例bart绑定一个name属性:

>>> bart.name = 'Bart Simpson'

>>>bart.name'Bart Simpson'

由于类可以起到模板的作用,因此,可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去。通过定义一个特殊的__init__方法,在创建实例的时候,就把name,score等属性绑上去:

classStudent(object):def __init__(self, name, score):

self.name=name

self.score= score

注意到__init__方法的第一个参数永远是self,表示创建的实例本身,因此,在__init__方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身。

有了__init__方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init__方法匹配的参数,但self不需要传,Python解释器自己会把实例变量传进去:

>>> bart = Student('Bart Simpson', 59)>>>bart.name'Bart Simpson'

>>>bart.score59

和普通的函数相比,在类中定义的函数只有一点不同,就是第一个参数永远是实例变量self,并且,调用时,不用传递该参数。除此之外,类的方法和普通函数没有什么区别,所以,你仍然可以用默认参数、可变参数、关键字参数和命名关键字参数。

数据封装

面向对象编程的一个重要特点就是数据封装。在上面的Student类中,每个实例就拥有各自的name和score这些数据。我们可以通过函数来访问这些数据,比如打印一个学生的成绩:

>>> defprint_score(std):

...print('%s: %s' %(std.name, std.score))

...>>>print_score(bart)

Bart Simpson:59

但是,既然Student实例本身就拥有这些数据,要访问这些数据,就没有必要从外面的函数去访问,可以直接在Student类的内部定义访问数据的函数,这样,就把“数据”给封装起来了。这些封装数据的函数是和Student类本身是关联起来的,我们称之为类的方法:

classStudent(object):def __init__(self, name, score):

self.name=name

self.score=scoredefprint_score(self):print('%s: %s' % (self.name, self.score))

要定义一个方法,除了第一个参数是self外,其他和普通函数一样。要调用一个方法,只需要在实例变量上直接调用,除了self不用传递,其他参数正常传入:

>>>bart.print_score()

Bart Simpson:59

这样一来,我们从外部看Student类,就只需要知道,创建实例需要给出name和score,而如何打印,都是在Student类的内部定义的,这些数据和逻辑被“封装”起来了,调用很容易,但却不用知道内部实现的细节。

封装的另一个好处是可以给Student类增加新的方法,比如get_grade:

classStudent(object):

...defget_grade(self):if self.score >= 90:return 'A'

elif self.score >= 60:return 'B'

else:return 'C'

同样的,get_grade方法可以直接在实例变量上调用,不需要知道内部实现细节:

>>>bart.get_grade()'C'

类是创建实例的模板,而实例则是一个一个具体的对象,各个实例拥有的数据都互相独立,互不影响;

方法就是与实例绑定的函数,和普通函数不同,方法可以直接访问实例的数据;

通过在实例上调用方法,我们就直接操作了对象内部的数据,但无需知道方法内部的实现细节。

python instance_python中类(class)和实例(instance)相关推荐

  1. python中类变量和实例变量详解

    python中类变量和实例变量详解 在了解类变量和实例变量之前,首先要知道类变量和实例变量的定义. 类变量:可在类的所有实例之间共享的值,就是指不是单独分配给每个实例,实例可以调用类变量. 实例变量: ...

  2. python编程例子-Python面向对象编程 - 类和实例

    一.preface 面向对象编程OOP:object oriented programming. OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数.Python是一门面向对象的编程语 ...

  3. Python namedtuple(命名元组)使用实例

    Python namedtuple(命名元组)使用实例 #!/usr/bin/python3import collectionsMyTupleClass = collections.namedtupl ...

  4. python列表框控件,Python 窗体(tkinter)下拉列表框(Combobox)实例

    废话不多说,看代码吧! import tkinter from tkinter import ttk def go(*args): #处理事件,*args表示可变参数 print(comboxlist ...

  5. python中student和student_理解Python中的类与实例

    面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的"对象",每个对象都拥有相同的 ...

  6. python创建类的实例方法-Python中动态创建类实例的方法

    简介 在Java中我们可以通过反射来根据类名创建类实例,那么在Python我们怎么实现类似功能呢? 其实在Python有一个builtin函数import,我们可以使用这个函数来在运行时动态加载一些模 ...

  7. 温度转换的python程序_Python通过小实例入门学习---1.0(温度转换)

    1.安装Python 3 下载地址: Welcome to Python.org​www.python.org 2."温度转换"实例:摄氏度--->华氏度 / 华氏度---& ...

  8. python爬虫简单实例-Python 利用Python编写简单网络爬虫实例3

    利用Python编写简单网络爬虫实例3 by:授客 QQ:1033553122 实验环境 python版本:3.3.5(2.7下报错 实验目的 获取目标网站"http://bbs.51tes ...

  9. python实现简单的api接口-python中接口的实现实例

    接口基础知识: 简单说下接口测试,现在常用的2种接口就是http api和rpc协议的接口,今天主要说:http api接口是走http协议通过路径来区分调用的方法,请求报文格式都是key-value ...

最新文章

  1. flink 三种时间机制_Flink的时间与watermarks详解
  2. 实验1 LINUX基本操作
  3. javascript string replace 正则替换
  4. java 任意数平均值_【编程题】通过键盘输入三个任意的数字,计算三个值的平均值,并输出结果。...
  5. SpringMVC在使用Jackson2时关于日期类型格式化的问题
  6. python编程学习做什么-什么样的人要学点python编程?请你对号入座
  7. k8s从入门到放弃--使用kubeadm快速安装kubernetes
  8. Hive分区(静态分区+动态分区)
  9. Faster RCNN论文详解
  10. 单行文本溢出显示省略号
  11. Windows系统开机自动运行程序和自动启动服务
  12. PLC通讯实现-C#实现三菱PLC通讯(三)
  13. 2021年中国乳制品行业发展现状分析,“双循环”助力行业发展「图」
  14. QT 5.9学习笔记
  15. ART Mterp Interpreter 解释 bytecode
  16. springboot毕业设计 基于springboot校园二手交易网站系统毕业设计设计与实现参考
  17. 潘麟-打通周天不稀奇
  18. BIOS入门基础-----BIOS阶段划分
  19. CVX配合MATLAB的使用心得
  20. 千锋教育2218期2022.11.04

热门文章

  1. 2020_CCPC长春L题 Coordinate Paper Exgcd贪心
  2. trace32 trace功能使用学习
  3. php微信登录app接口开发文档,PHP微信OAuth2网页授权登陆接口
  4. 年轻人开始流行给自己买花
  5. 「SQL面试题库」 No_61 每位学生的最高成绩
  6. 关于win7+ubuntu双系统安装过程
  7. java ftp 权限_FTP用户权限
  8. 【Linux应用】卷组概念及其操作
  9. 计算机组成原理(1)课程概貌、地位、分割整合
  10. link-group