面向对象最重要的概念就是类(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 = nameself.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)

输出

Bart Simpson:59

但是既然Student类本身就有数据,要访问这些数据,就没有必要从外面的函数去访问

可以直接在Student类的内部定义访问数据的函数,这样,就把“数据”给封装起来了。

这些封装数据的函数是和Student类本身是关联起来的,我们称之为类的方法:

class Student1(object):def __init__(self,name,score):#特殊方法“__init__”前后分别有两个下划线!!!self.name = nameself.score = scoredef print_score(self):#数据封装print('%s: %s' % (self.name, self.score))
Peter = Student1('Peter',99)
Peter.print_score()

输出

Peter:99

这样打印的操作都在类的内部定义好,我们只需要知道创建实例的时候给什么参数,然后调用

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

class Student2(object):def __init__(self,name,score):#特殊方法“__init__”前后分别有两个下划线!!!self.name = nameself.score = scoredef 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())

输出

kael A

Python学习:类与实例相关推荐

  1. python类定义中__init__()_转:python学习——类中为什么要定义__init__()方法

    学习Python的类,一直不太理解为什么一定要定义init()方法,现在简要谈一下自己的理解吧. 1.不用init()方法定义类 定义一个矩形的类,目的是求周长和面积. 1 classRectangl ...

  2. python的类和实例_Python 面向对象编程——类和实例

    1面向对象编程 面向对象编程: 面向对象编程--Object OrientedProgramming OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机程 ...

  3. python学习--类、模块、包

    目录 面向对象编程思想 类的特点 类的定义 类的变量 类的方法 类中的方法 类方法 静态方法 实例方法 类的继承 子类的定义 覆写父类的方法 私有化 下划线相关变量命名 模块 包 面向对象编程思想 类 ...

  4. day24 python学习 类 画元,命名空间作用域,组合,人狗大战升级

    类命名空间与对象.实例的命名空间 创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性 而类有两种属性:静态属性和动态属性 静态属性就是直接在类中定义的变量 动态属性就 ...

  5. JavaScript学习-类与实例

    类.实例 使用同一个构造函数创建的对象,我们称为一类对象,也将一个构造函数称为一个类. 通过一个构造函数创建的对象,称为该类的实例. instanceof 使用 instanceof 可以检查一个对象 ...

  6. Python学习——类与对象

    一.编程的两大思想 (1)面向过程 事物比较简单,用简单的线性思维即可解决 (2)面向对象 事物比较复杂,用简单的线性思维无法解决 (3)两者之间的关系 在面对复杂的问题时,宏观上是使用面向对象,但具 ...

  7. python传递类的实例_使用Python将变量从一个类实例传递到另一个类实例?

    我在将一个类实例中定义的变量传递到另一个类实例时遇到问题.我对使用类比较陌生,但据我所知,变量可以通过简单地定义为类实例的一部分(例如在下面的示例中)从一个实例传递到另一个实例.虽然我以前使用过这个模 ...

  8. python的类,实例,以及实例化

    在看代码的时候,发现一些特别的写法class,self. class cat():def __init__(self, color, weight):self.color = colorself.we ...

  9. Python学习 1.3 —— 实例一:温度转换

    实例一:温度转换 "温度转换"问题分析 温度转换 需求分析 问题分析 分析问题 划分边界 输入输出格式设计 设计算法 "温度转换"实例编写 程序源码 " ...

  10. python学习-类(类方法、实例方法、静态方法)

    文章目录 基础知识补充 类方法.实例方法.静态方法 基础知识补充 Python面向对象-访问权限public和private 可以在属性的名称前面加上两个下划线__.如果一个变量以__开头,就变成了一 ...

最新文章

  1. consul服务下线通知_Consul微服务的配置中心体验篇-阿里云开发者社区
  2. windowsXP用户被禁用导致不能网站登录
  3. 7、Altiris cms 7.0 软件管理 下
  4. python输出数据格式_这串数据有什么方法用python输出我想要的格式?
  5. 为开源软件评级—商业就绪分级(BRR)模型
  6. php 开发微信h5,微信h5页面开发遇到那些坑
  7. CRM项目经验总结-从DAO层到链接数据池
  8. mysql grou平by_MySQL group by对单字分组序和多字段分组的方法讲解
  9. python 列表 换行_python基础语法学习——参考Python Crash Course
  10. ELK学习10_ELK系列--实时日志分析系统ELK 部署与运行中的问题汇总
  11. 云服务器支持javascript,云服务器支持javascript
  12. 程序员遇到什么样的工作状态应该果断跳槽走人?
  13. mysql数据库:mysql增删改、单表、多表及子查询
  14. 经典并发问题:生产者-消费者
  15. html thead作用,HTML thead 标签定义和用法详细介绍
  16. 使用dd命令制作固定大小的文件
  17. 微信公众号的简单开发
  18. 【房屋租赁网管理系统】
  19. html----烟花代码
  20. Apple?apple!

热门文章

  1. 爱情保证书制作生成微信小程序源码下载
  2. vue2.0心得感悟
  3. 2020最新版Selenium异常集锦
  4. 自建防火墙日志分析系统V1
  5. Windows7 快捷键
  6. 接上一篇:【Vue 项目打包后访问报错:Uncaught TypeError: Cannot read property 'call' of undefined】
  7. 基于modprobe_path的内核提权方法
  8. 豹变猫?实时场景转变?NVIDIA多模式图像转换技术都能实现
  9. linux卸载系统自带的openjdk,卸载Linux自带openjdk
  10. php+程序员技能,PHP程序员技能站