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把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机程 ...
随机推荐
- Linux OpenSSH后门的添加与防范
引言:相对于Windows,Linux操作系统的密码较难获取.不过很多Linux服务器配置了OpenSSH服务,在获取root权限的情况下,可以通过修改或者更新OpenSSH代码等方法,截取并保存其S ...
- Android 4.4以上使用HttpURLConnection底层使用OkHttp实现的源码分析
研究了一下HttpURLConnection的源码: 在使用的时候都是通过URL.openConnection()来获取HttpURLConnection对象,然后调用其connect方法进行链接,所 ...
- Jlink 烧写Uboot
第一章 Hi3531_SDK_Vx.x.x.x版本升级操作说明 如果您是首次安装本SDK,请直接参看第2章. 第二章首次安装SDK 1.Hi3531 SDK包位置 在"Hi3531_V100 ...
- phpexcle 导出数据 日期格式的问题
在使用phpexcle 读取excle中日期格式的出现了问题.特此记录 gmdate("Y-m-d H:i:s", PHPExcel_Shared_Date::ExcelToPHP ...
- MySQL语法大全整理的自学笔记
select * from emp; #注释 #--------------------------- #----命令行连接MySql--------- #启动mysql服务器 net start m ...
- 书籍--嵌入式C语言
1,C语言嵌入式编程修炼 [C/C++]C语言嵌入式编程修炼·背景篇·软件架构篇·内存操作篇
- WPF基础篇之空间布局
由于之前自己做的都是大多是B/S架构的项目,加入新公司,公司现在用的WPF,在WPF中一个比较重要的知识点:布局 在网上找到一篇比较好的介绍WPF布局的文章. 文章地址:http://www.cnbl ...
- LinkedHashMap和HashMap
1.HashMap: HashMap里面存入的键值对在取出的时候是随机的,是比较常用的Map.它根据key的HashCode值存储数据,根据key可以直接取出它的值(当然也有冲突的情况,不过遍历链表就 ...
- 一个仿3D的平面游戏页面
package com.totoo.TouhouMassLight;import android.os.Bundle;import android.view.MotionEvent;import an ...
- [Luogu3768]简单的数学题
题面戳我 题意:求 \[\sum_{i=1}^{n}\sum_{j=1}^{n}ij\gcd(i,j)\] \(n\le10^{10}\) sol \[ans=\sum_{d=1}^{n}d\sum_ ...