Python3学习笔记17-类与实例
面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类
而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。
定义类通过class关键字
class Student(object):
pass
class后面跟着的是类名,类名通常大写开头的单词,object表示从哪个类继承的
通常,如果没有合适的继承类,就使用object类
定义好了类,可以根据类名创建对应的实例,创建实例是通过类名+()实现的:
bart = Student()
可以给实例的变量绑定属性
bart.name = 'Bart Simpson'
由于类可以起到模板的作用,因此,可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去。
通过定义一个特殊的__init__方法,在创建实例的时候,就把name,score等属性绑上去:
class Student(object):
def __init__(self,name,score):#特殊方法“__init__”前后分别有两个下划线!!!
self.name = name
self.score = score
bart = Student('Bart Simpson',59)
有了__init__方法,在创建实例的时候不能传入空的参数,必须传与之匹配的参数
self不需要传,解释器会自动把实例变量带进去
和普通函数相比,类中定义的函数只有一点不同,就是第一个参数永远是self,并且调用时候,不用传该参数
除此之外,类方法的函数和普通函数没区别,仍然可以用默认参数,可变参数,关键字参数和命名关键字参数
数据封装
面对对象编程一个重要特点就是数据封装
在上面的Student类中,每个实例就拥有各自的name和score这些数据。
我们可以通过函数来访问这些数据,比如打印一个学生的成绩
def print_score(std):
print('%s: %s' % (std.name, std.score))
print_score(bart)
但是既然Student类本身就有数据,要访问这些数据,就没有必要从外面的函数去访问
可以直接在Student类的内部定义访问数据的函数,这样,就把“数据”给封装起来了。
这些封装数据的函数是和Student类本身是关联起来的,我们称之为类的方法:
class Student1(object):
def __init__(self,name,score):#特殊方法“__init__”前后分别有两个下划线!!!
self.name = name
self.score = score def print_score(self):#数据封装
print('%s: %s' % (self.name, self.score))
Peter = Student1('Peter',99)
Peter.print_score()
这样打印的操作都在类的内部定义好,我们只需要知道创建实例的时候给什么参数,然后调用
封装的另一个好处是可以给Student类增加新的方法,比如get_grade:
class Student2(object):
def __init__(self,name,score):#特殊方法“__init__”前后分别有两个下划线!!!
self.name = name
self.score = score def print_score(self):#这是下面数据封装的代码 类的方法
print('%s: %s' % (self.name, self.score)) def get_grade(self):#给类添加新方法
if self.score >= 90:
return 'A'
elif self.score >=60:
return 'B'
else:
return 'C'
kael = Student2('kael',99)
print(kael.name,kael.get_grade())
Python3学习笔记17-类与实例的更多相关文章
- python3学习笔记(7)_listComprehensions-列表生成式
#python3 学习笔记17/07/11 # !/usr/bin/env python3 # -*- conding:utf-8 -*- #通过列表生成式可以生成格式各样的list,这种list 一 ...
- python3学习笔记(6)_iteration
#python3 学习笔记17/07/10 # !/usr/bin/env python3 # -*- coding:utf-8 -*- #类似 其他语言的for循环,但是比for抽象程度更高 # f ...
- python3学习笔记(5)_slice
#python3 学习笔记17/07/10 # !/usr/bin/env python3 # -*- coding:utf-8 -*- #切片slice 大大简化 对于指定索引的操作 fruits ...
- python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息,抓取政府网新闻内容
python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息PySpider:一个国人编写的强大的网络爬虫系统并带有强大的WebUI,采用Python语言编写 ...
- Python3学习笔记 - 准备环境
前言 最近乘着项目不忙想赶一波时髦学习一下Python3.由于正好学习了Docker,并深深迷上了Docker,所以必须趁热打铁的用它来创建我们的Python3的开发测试环境.Python3的中文教程 ...
- Python3学习笔记(urllib模块的使用)转http://www.cnblogs.com/Lands-ljk/p/5447127.html
Python3学习笔记(urllib模块的使用) 1.基本方法 urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, ...
- python学习笔记4_类和更抽象
python学习笔记4_类和更抽象 一.对象 class 对象主要有三个特性,继承.封装.多态.python的核心. 1.多态.封装.继承 多态,就算不知道变量所引用的类型,还是可以操作对象,根据类型 ...
- input子系统学习笔记六 按键驱动实例分析下【转】
转自:http://blog.chinaunix.net/uid-20776117-id-3212095.html 本文接着input子系统学习笔记五 按键驱动实例分析上接续分析这个按键驱动实例! i ...
- python3学习笔记(4)_function-参数
#python学习笔记 17/07/10 # !/usr/bin/evn python3 # -*- coding:utf-8 -*- import math #函数 函数的 定义 #定义一个求绝对值 ...
- python3学习笔记(1)_string
#python学习笔记 17/07/07 # !/usr/bin/evn python3 # -*- coding:utf-8 -*- #r"" 引号当中的字符串不转义 #练习 # ...
随机推荐
- [hgoi#2019/2/16t3]psolve
题目描述 Dustar有n道题目要做.他的月薪是m元. 由于题目是一流的难题,所以Dustar不得不找个人来帮(代)助(替)他写作业. 找人写作业不是免费的,但是他们能保证在一个月内做出任何题目.每做 ...
- 如何安装/卸载workflow manager 1.0
安装 1. 配置文件: <Workflow> <!--http://msdn.microsoft.com/en-us/library/windowsazure/jj193269(v= ...
- Eclipse 插件Maven在使用 add dependency,找不到包,解决办法
通过右键单击pom.xml文件选择maven –> add dependency 或者是打开pom.xml文件,选择dependencies –>add 时,搜索不到依赖的jar包,解决方 ...
- c++11 条件变量 生产者-消费者 并发线程
http://baptiste-wicht.com/posts/2012/04/c11-concurrency-tutorial-advanced-locking-and-condition-vari ...
- win32 窗口缩放时出现闪屏
今天无意发现之前写的一个小工具在缩放窗口的时候,出现闪屏,主要有两个位置: 工具栏出一闪屏 右侧的控制面板出现闪屏 (这个控制面板与多层元件组合而成) 之前真没注意到这个问题,平时都是最大化/恢复窗口 ...
- module模块和包(十七)
在前面的几个章节中我们脚本上是用 python 解释器来编程,如果你从 Python 解释器退出再进入,那么你定义的所有的方法和变量就都消失了. 为此 Python 提供了一个办法,把这些定义存放在文 ...
- Linux中的Diff和Patch
本文主要记录两个命令的学习情况:diff 和 patch.diff 和 patch 是一对工具,使用这对工具可以获取更新文件与历史文件的差异,并将更新应用到历史文件上.在数学上说,diff就是对两个集 ...
- ISO七层模型详解
ISO七层模型详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在我刚刚接触运维这个行业的时候,去面试时总是会做一些面试题,笔试题就是看一个运维工程师的专业技能的掌握情况,这个很 ...
- Gitlab部署
前言 因部门业务整顿,需将原有的多部门共用的Gitlab环境遗弃,新建部门独立的Gitlab环境! 安装 CE版本安装操作:https://about.gitlab.com/install/#cent ...
- jmeter使用正则表达式匹配多个中的响应结果
一.背景: 同一个正则表达式匹配多个响应结果值,之前都是添加多个正则表达式,一个一个去获取需要的值,比较麻烦:今天尝试了一下用一个正则表达式获取响应中所有需要的值,使用这种方式也能够获取多个结果中指定 ...