面向对象最重要的概念就是类(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-类与实例的更多相关文章

  1. python3学习笔记(7)_listComprehensions-列表生成式

    #python3 学习笔记17/07/11 # !/usr/bin/env python3 # -*- conding:utf-8 -*- #通过列表生成式可以生成格式各样的list,这种list 一 ...

  2. python3学习笔记(6)_iteration

    #python3 学习笔记17/07/10 # !/usr/bin/env python3 # -*- coding:utf-8 -*- #类似 其他语言的for循环,但是比for抽象程度更高 # f ...

  3. python3学习笔记(5)_slice

    #python3 学习笔记17/07/10 # !/usr/bin/env python3 # -*- coding:utf-8 -*- #切片slice 大大简化 对于指定索引的操作 fruits ...

  4. python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息,抓取政府网新闻内容

    python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息PySpider:一个国人编写的强大的网络爬虫系统并带有强大的WebUI,采用Python语言编写 ...

  5. Python3学习笔记 - 准备环境

    前言 最近乘着项目不忙想赶一波时髦学习一下Python3.由于正好学习了Docker,并深深迷上了Docker,所以必须趁热打铁的用它来创建我们的Python3的开发测试环境.Python3的中文教程 ...

  6. Python3学习笔记(urllib模块的使用)转http://www.cnblogs.com/Lands-ljk/p/5447127.html

    Python3学习笔记(urllib模块的使用)   1.基本方法 urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None,  ...

  7. python学习笔记4_类和更抽象

    python学习笔记4_类和更抽象 一.对象 class 对象主要有三个特性,继承.封装.多态.python的核心. 1.多态.封装.继承 多态,就算不知道变量所引用的类型,还是可以操作对象,根据类型 ...

  8. input子系统学习笔记六 按键驱动实例分析下【转】

    转自:http://blog.chinaunix.net/uid-20776117-id-3212095.html 本文接着input子系统学习笔记五 按键驱动实例分析上接续分析这个按键驱动实例! i ...

  9. python3学习笔记(4)_function-参数

    #python学习笔记 17/07/10 # !/usr/bin/evn python3 # -*- coding:utf-8 -*- import math #函数 函数的 定义 #定义一个求绝对值 ...

  10. python3学习笔记(1)_string

    #python学习笔记 17/07/07 # !/usr/bin/evn python3 # -*- coding:utf-8 -*- #r"" 引号当中的字符串不转义 #练习 # ...

随机推荐

  1. Spark 集成开发

    WordCount.py # coding:utf-8 from pyspark import SparkContext from pyspark import SparkConf def SetLo ...

  2. Java核心技术-具体的集合

    除了Map结尾的类之外,其他都实现了Collection接口,而以Map结尾的类实现了Map接口. 链表 在Java程序设计语言中,所有链表实际上都是双向链表的(double linked)--即每个 ...

  3. Elasticsearch 基础知识要点与性能监控

    本文的来源是我翻译国外的一篇技术博客,感谢原作者Emily Chang,原文地址通过如下的知识,我们能大致学到关于ES的一些基本知识,进而对elasticsearch的性能进行监控和调优 注意elas ...

  4. bracketed-paste-magic:zle:41: not enough arguments for -U

    原因是zsh的插件出问题了,解法方法如下: 把 ~/.oh-my-zsh/lib/misc.zsh 文件中的第一段 if 注释掉 OK 啦 # ]]; then # for d in $fpath; ...

  5. jar包注册为Linux服务

    如果是SpringBoot项目,则需修改配置pom.xml为: <build> <plugins> <plugin> <groupId>org.spri ...

  6. spring @Transactional注解参数详解

    事物注解方式: @Transactional 当标于类前时, 标示类中所有方法都进行事物处理 , 例子: @Transactional public class TestServiceBean imp ...

  7. P1450 [HAOI2008]硬币购物

    题目描述 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买si的价值的东西.请问每次有多少种付款方法. di,s<=100000 ...

  8. Python复习笔记(三)函数进阶

    问题 1:在函数内部,针对参数使用 赋值语句,会不会影响调用函数时传递的 实参变量? —— 不会! 无论传递的参数是 可变 还是 不可变 只要 针对参数 使用 赋值语句,会在 函数内部 修改 局部变量 ...

  9. 通用Excel文件导出工具类

    1:Excel格式 2:ExcelUtil.java import java.io.ByteArrayOutputStream; import java.io.IOException; import ...

  10. 怎样动态地插入不会暴露给用户的JS文件

    也是无意间看见的,以前想过这个问题,但是没多想,今天看到这段代码豁然开朗 (function() { var dynamicScript = document.createElement('scrip ...