Python进阶_类与实例
上一节将到面对对象必须先抽象模型,之后直接利用模型。这一节我们来具体理解一下这句话的意思。
面对对象最重要的概念就是类(class)和实例(instance),必须牢记类是抽象的模板,比如student类,而实例是根据类创建出来的一个个具体的‘对象’,每个对象拥有相同的方法,但各自的数据可能不同。
一.类的创建和实例化
在python中,类是通过class关键字创建的
class Student():
pass
class后面紧接着是类名,即Student,类名通常是大写开头的单词。关键字pass起到占位符的作用。
定义好类之后可以通过类来创建实例
p1=Student() print(Student)
print(p1) ###输出结果
#<class '__main__.Student'>
#<__main__.Student object at 0x013BD430>
Student本身是一个类。p1是Student的一个实例,0x013BD430是类的地址。创建实例是通过类名+()实现的。
创建类的时候,我们可以把类具有的属性添加进去,例如Student具有的属性name和score。
class Student():
def __init__(self,name,score):
self.name=name
self.score=score
#注意__init__是双下划线开始和结束的,这是Python中一个特殊的魔术方法,魔术方法以后会介绍
注意:__init__方法的第一个函数永远是self,它表示创建的实力本身,因此__init__方法内部就可以吧各种属性绑定到self,因为self就是实例本身。name是一般的参数,self.name=name是将name变为实例的属性。有了__init__方法,在创建实例传参的时候必须要跟__init__参数匹配,但是self不用传参,python解释器自己会将实例变量传进去。
p1=Student('方方','')
传参的原理是这样的p1=Student.__init__(p1,'方方','91')。__init__是一种特殊的方法,在实例创建的时候是自动调用的,这相当于在一个小孩儿没出生前就给小孩起名字是一样的,主要是防止以后利用这些属性的时候而没有这些属性。
我们可以查看这些属性
print(p1.name)
print(p1.score)
##输出
#方方
#
我们还可以在类中定义其他方法
class Student():
def __init__(self,name,score):
self.name=name
self.score=score
def get_name(self):
return self.name
def get_score(self):
return self.score
p1=Student('方方','')
print(p1.get_name())
print(p1.get_score())
细心观察我们会发现,类中调用的函数第一个参数是self,到用时不用传参(python解释器自己会将实例变量传进去),除此之外,类的方法和普通函数没有任何区别。
二.数据封装
面向对象编程的一个重要特点就是数据封装。在上面的Student类中,每个实例就拥有各自的name和score这些数据。既然Student实例本身就拥有这些数据,要访问这些数据,就没有必要从外面的函数去访问,可以直接在Student类的内部定义访问数据的函数,这样,就把“数据”给封装起来了。这些封装数据的函数是和Student类本身是关联起来的,我们称之为类的方法:
class Student():
def __init__(self,name,score):
self.name=name
self.score=score
def get_name(self):
return self.name
def get_score(self):
return self.score
p1=Student('方方','')
print(p1.get_name())
print(p1.get_score())
我们来看一下内部结构:

这样一来,我们从外部看Student类,就只需要知道,创建实例需要给出name和score,而如何打印,都是在Student类的内部定义的,这些数据和逻辑被“封装”起来了,调用很容易,但却不用知道内部实现的细节。
小结:
1.类是创建实例的模板,而实例是一个个具体的对象,各个实例拥有数据都互相独立,互不影响
2.方法就是与实例绑定的函数,和普通函数不同,方法可以直接访问实例的数据
3.通过在实例上调用方法,我们就直接操作了对象内部的数据,但无需知道方法内部的实现细节
4.和静态语言不同,Python允许对实例变量绑定任何数据,也就是说,对于两个实例变量,虽然它们都是同一个类的不同实例,但拥有的变量名称都可能不同
Python进阶_类与实例的更多相关文章
- Python进阶:函数式编程实例(附代码)
Python进阶:函数式编程实例(附代码) 上篇文章"几个小例子告诉你, 一行Python代码能干哪些事 -- 知乎专栏"中用到了一些列表解析.生成器.map.filter.lam ...
- python进阶_浅谈面向对象进阶
python进阶_浅谈面向对象进阶 学了面向对象三大特性继承,多态,封装.今天我们看看面向对象的一些进阶内容,反射和一些类的内置函数. 一.isinstance和issubclass class F ...
- python学习_数据处理编程实例(二)
在上一节python学习_数据处理编程实例(二)的基础上数据发生了变化,文件中除了学生的成绩外,新增了学生姓名和出生年月的信息,因此将要成变成:分别根据姓名输出每个学生的无重复的前三个最好成绩和出生年 ...
- Python 进阶_生成器 & 生成器表达式
目录 目录 相关知识点 生成器 生成器 fab 的执行过程 生成器和迭代器的区别 生成器的优势 加强的生成器特性 生成器表达式 生成器表达式样例 小结 相关知识点 Python 进阶_迭代器 & ...
- python中的类和实例
今天花了两个多小时后搜索相关博客看了看python中有关类和实例的介绍,差不多大概明白了. python中的类和c++中的类是一样的,不同之处就是c++的类,如果含有成员变量,并且成员变量发生变化后, ...
- Python学习:类和实例
Python学习:类和实例 本文作者: 玄魂工作室--热热的蚂蚁 类,在学习面向对象我们可以把类当成一种规范,这个思想就我个人的体会,感觉很重要,除了封装的功能外,类作为一种规范,我们自己可以定制的规 ...
- python之定义类创建实例
https://www.cnblogs.com/evablogs/p/6688938.html 类的定义 在Python中,类通过class关键字定义,类名以大写字母开头 1 2 >>&g ...
- Python学习_11_类和实例
类和实例 类是对象创建实例的模板,而实例则是对象的实体.类使用class关键字定义: class MyClass: pass python中创建实例直接使用工厂函数(类名加上一对括号),和其他的 ...
- Python面向对象编程 -- 类和实例、访问限制
面向对象编程 Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机程 ...
随机推荐
- cache缓存的BUG
坑: 1.在使用这个模版代码开发的时候,当我们改变了数据库表的设置的时候,我们都要把本地的cache缓存文件删除一下. 如果不删除的话,当我们改变数据库设置的之后,程序读取数据是从本地的缓存文件里面读 ...
- 设置TCP_USER_TIMEOUT参数来判断tcp连接是否断开
[TOC] 1. bug描述 前段时间遇到这样的一个问题,openstack一个控制节点宕机后,在宕机后一段时间内创建的虚拟机,一直卡在创建中的状态.有的甚至要等到16分钟之后虚拟机才会切换到下一个状 ...
- MySQL之pymysql模块
MySQL之pymysql模块 import pymysql #s链接数据库 conn = pymysql.connect( host = '127.0.0.1', #被连接数据库的ip地址 po ...
- Android线上Bug热修复分析
针对app线上修复技术,目前有好几种解决方案,开源界往往一个方案会有好几种实现.重复的实现会有造轮子之嫌,但分析解决方案在技术上的探索和衍变,这轮子还是值得去推动的 关于Hot Fix技术 Hot F ...
- Excel 2010高级应用-饼图(四)
Excel 2010高级应用-饼图(四) 基本操作如下: 1.新建空白文档,并命名饼图 2.单击"插入",找到饼图样例图 3.选择其中一种饼图图例,单击并在空白文档上生成饼图图框 ...
- MTBF
MTBF,即平均故障间隔时间,英文全称是"Mean Time Between Failure".是衡量一个产品(尤其是电器产品)的可靠性指标.单位为"小时".它 ...
- MyEclipse10中配置WebLogic10
MyEclipse10中配置WebLogic10 1.双击打开MyEclipse10,依次操作"Window--->Preferences" 2.在左侧菜单中找到" ...
- FPGA 状态机设计
数字系统有两大类有限状态机(Finite State Machine,FSM):Moore状态机和Mealy状态机. Moore状态机 其最大特点是输出只由当前状态确定,与输入无关.Moore状态机的 ...
- Vue01 Vue介绍、Vue使用、Vue实例的创建、数据绑定、Vue实例的生命周期、差值与表达式、指令与事件、语法糖
1 Vue介绍 1.1 官方介绍 vue是一个简单小巧的渐进式的技术栈,它提供了Web开发中常用的高级功能:视图和数据的解耦.组件的服用.路由.状态管理.虚拟DOM 说明:简单小巧 -> 压缩后 ...
- 异常-----Template user.ftl not found
freemarker 1.错误描述 java.io.FileNotFoundException: Template user.ftl not found. at freemarker.template ...