面向对象基础

面向过程编程

面向过程的核心是'过程'二字, 过程指的是做事情的步骤, 既先做什么再做什么

基于该编程思想编写程序, 就好比一条工厂流水线, 一种机械式的思维方式

  • 优点: 逻辑清晰, 复杂的问题流程化, 进而简单化
  • 缺点: 可扩展性差

面向对象编程

面向对象的核心是'对象'二字, 对象指的是特征和技能的结合体

基于该编程思想编写程序, 就好比在创造世界, 一种上帝式的思维方式

  • 优点: 可扩展性强
  • 缺点: 编写程序的复杂度要远高于面向过程编程

什么是类

从上面我们知道对象是特征和技能的结合体, 而类是一系列对象相同的特征和技能的结合体

在程序中, 先定义类, 再调用类来生成对象

如何定义类

  • 定义类的规则:

    1. 先从现实世界中, 基于一个个的对象, 抽取出类
    2. 定义类
  • 定义类的语法:

class 类名:
# 对象相同的特征
Kind = 'human'
# 对象相同的技能
def eat(self):
pass '''
class: 用来定义类的, class后跟的是类名
类名: 类的名字, 用来调用创造对象的
注意: 类名必须遵循驼峰命名法
'''
  • 在定义类发生的事情:

    1. 类定义时, 会产生一个空的名称空间

    2. 把类内部所有的名字, 扔进类的名称空间中

注意: 类在定义阶段就已经产生好了名称空间, 执行Python文件时执行类内部的代码

class Human:
print('from class Human')
kind = 'human'
def eat(self):
pass # 运行上述代码结果为: from class Human
# 因此类在定义阶段会执行类中的代码

类的基本操作

class Programmer:
# 特征
language = 'Python'
# 技能
def programming(self):
print('programming...') # 查看类的名称空间内所有名字
print(Programmer.__dict__) # '__module__': '__main__', 'language': 'Python', 'programming': <function programmer.programming at 0x00000000029C7620>, '__dict__': <attribute '__dict__' of 'programmer' objects>, '__weakref__': <attribute '__weakref__' of 'programmer' objects>, '__doc__': None} # 查
print(Programmer.__dict__.get('language')) # Python
print(Programmer.language) # Python # 改
Programmer.language = 'Java'
print((Programmer.language) # Java # 增
Programmer.girlfriend = 'hands'
print(Programmer.girlfriend) # hands # 删
del Programmer.girlfriend
print(Programmer.girlfriend) # type object 'Programmer' has no attribute 'girlfriend'

对象

实例化对象

实例化对象就是调用类来生成对象

  • 语法: 对象 = 类名()
  • 名称空间的产生:
    1. 类的名称空间在类的定义阶段就已经产生了
    2. 对象的名称空间, 在实例化对象的时候产生(调用类的时候)
class Programmer:
# 特征
language = 'Python'
# 技能
def programming(self):
print('programming...') pgmmer1 = Programmer()
pgmmer2 = Programmer()
pgmmer3 = Programmer() print(pgmmer1.language) # Pyhton pgmmer1.programming() # programming...

对象添加特有属性

问题: 我们通过实例化生成的对象特征和技能全都一样

解决: 在类的内部定义__init__函数, __init__函数可以为对象初始化某些属性, 在类被调用时, 自动触发该函数

class Programmer:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender language = 'Python' def programming(self):
print('programming...') # 我们再__init__函数里设置了三个参数, 因此我们在调用类时就必须传入三个参数
pgmmer1 = Programmer('A', '10', 'male')
pgmmer2 = Programmer('B', '20', 'male')
pgmmer3 = Programmer('C', '30', 'male') print(pgmmer1.name) # A
print(pgmmer2.name) # B
  • 调用类发生的事情:

    1. 首先会产生一个空的对象名称空间
    2. 会自动触发__init__函数
    3. 把对象本身以及括号内参数一并传给__init__函数
    4. 运行__init__函数并把产生的名称丢入该对象的名称空间
  • 总结: 调用类会产生一个对象, 调用类的过程叫做类的实例化, 产生的对象称之为类的一个实例

对象与类的查找顺序

  • 对象与类的查找顺序:

    1. 对象.属性, 若对象本身有, 则优先查找对象自己的
    2. 若对象本身没有, 则去类里面找, 若类没有, 则报错
class Programmer:
def __init__(self,language):
self.language = language language = 'Python' def programming(self):
print('programming...') pgmmer = Programmer('Java') print(pgmmer.language) # Java

对象的绑定方法

  • 对于类内部的函数, 其主要是给对象使用的:

    1. 当函数由类直接调用时, 该函数只是一个普通的函数, 因此函数需要几个参数就得传几个参数
    2. 当由对象调用称之为对象的绑定方法, 不同对象调用该绑定方法, 则会把不同的对象传入该绑定方法中
    3. 二者调用函数实现的功能是一样的
  • 对象的绑定方法, 是由对象来调用的, 其特殊之处就是会把对象当做第一个参数传入 该方法中
class Programmer:
# 特征
language = 'Python'
# 技能
def programming(self):
print('programming...') pgmmer = Programmer() # 由类来调用时, 需要传一个参数给self
Programmer.programming(1) # programming... # 由对象调用绑定方法时, 默认把对象本身传入该方法, 因此不用再传入多余的参数
pgmmer.programming() # programming...

Python3 类与对象的更多相关文章

  1. python3 类、对象的基础概念

    类:具有相同特性和方法的抽象概念称为类 对象:从类中具体描述的一个事物称为对象 类和对象的关系:类是对象的抽象概念,对象是类的具体实例 class test001: #创建类 def __init__ ...

  2. Python3 类与对象之王者荣耀对战小游戏

    王者荣耀对战小游戏 # 定义英雄: 亚瑟 class Arthur: hero_type = 'Tank' def __init__(self, attack_value=164, armor=98, ...

  3. python3.x 类和对象

    python同样支持类和对象.在python3.x中没有了经典类,只有新式类,默认创建的就是新式类.具体的新式类与经典类的不同在python3.x中已经没有意义了. 类的定义和实例化 python定义 ...

  4. (08)-Python3之--类和对象

    1.定义 类:类是抽象的,一类事物的共性的体现.  有共性的属性和行为. 对象:具体化,实例化.有具体的属性值,有具体做的行为. 一个类 对应N多个对象. 类包含属性以及方法. class 类名: 属 ...

  5. day24:面向对象设计与面向对象编程、类和对象

    一.三大编程范式: 面向过程: 面向函数: 面向对象: 二.程序的进化论: 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 2.从上述的指令中提取重复的代码块或逻辑,组织到一起(比方说,你定 ...

  6. python的类和对象——进阶篇

    写在前面的话 终于,又到了周五.当小伙伴们都不再加班欢欢喜喜过周末的时候,我刚刚写完这一周的游戏作业,从面对晚归的紧皱眉头到现在的从容淡定,好像只有那么几周的时间.突然发现:改变——原来这么简单.很多 ...

  7. python 面向对象之封装与类与对象

    封装 一,引子 从封装本身的意思去理解,封装就好像是拿来一个麻袋,把小猫,小狗,小王八,小老虎一起装进麻袋,然后把麻袋封上口子.照这种逻辑看,封装='隐藏',这种理解是相当片面的 二,先看如何隐藏 在 ...

  8. python 类和对象

    类和对象 类 1.类的组成    数据和函数,二者是类的属性 2.两个作用: 实例化 属性引用  属性引用:类名.属性(增删改查)   实例化: 类名加括号就是实例化,会自动出发__init__的运行 ...

  9. Python类和对象

    目录 类与对象 其他方法 继承 经典类和新式类 派生 组合 接口.归一化设计与抽象类 继承实现的原理 子类中调用父类的方法 指名道姓 super()方法 多态与多态性 封装 单下划线开头 双下划线开头 ...

随机推荐

  1. 领扣(LeetCode)字符串相加 个人题解

    给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和. 注意: num1 和num2 的长度都小于 5100. num1 和num2 都只包含数字 0-9. num1 和num2 都不包 ...

  2. bootstrap中图片响应式

    主要解决的是在轮播图中图片响应式的问题 目的 各种终端都需要正常显示图片 移动端应该使用更小(体积)的图片 实现方式 给标签添加两个data-属性(如:data-img-sm="小图路径&q ...

  3. 机器学习 TensorFlow 实现智能鉴黄

    前言 最近在做一款图床服务,关注公号的小伙伴一定记得小柒曾说过,会在周末放出的,不好意思放大家鸽子了.之所以一直没敢放出,是因为鉴黄接口一直没调试好,虽然我对公号的小伙伴百分之百信任,奈何互联网鱼龙混 ...

  4. PostGIS 递归方法

    在Oracle数据库中,有可以实现递归的函数 select * from table_name start with [condition1] connect by [condition2] 最近发现 ...

  5. HTTP 协议漫谈

    转载出处:HTTP 协议漫谈 简介 网络上已经有不少介绍 HTTP 的好文章,对HTTP的一些细节介绍的比较好,所以本篇文章不会对 HTTP 的细节进行深究,而是从够高和更结构化的角度将 HTTP 协 ...

  6. 组长组——“多彩夕阳”APP评价

    基于NABCD评论,及改进建议 一.组长组NABCD: N-需求背景: (1)我国老龄化日益加重,已突破两亿.目前人数还在增加,解决老年福祉成为社会关注的民生话题. (2)智能手机越来越普遍,老年人已 ...

  7. 《HelloGitHub》第 44 期

    兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. 这是一个面向编程新手.热爱编程.对开源社区感兴趣 人群的月刊,月刊的内容包括:各种编 ...

  8. 【论文阅读】CornerNet: Detecting Objects as Paired Keypoints

    以下内容将介绍ECCV2018的一篇目标检测的文章<CornerNet: Detecting Objects as Paired Keypoints>.该文章讲述了一个老子就是不用anch ...

  9. 新闻实时分析系统 Spark2.X分布式弹性数据集

    1.三大弹性数据集介绍 1)概念 2)优缺点对比 2.Spark RDD概述与创建方式 1)概述 在集群背后,有一个非常重要的分布式数据架构,即弹性分布式数据集(resilientdistribute ...

  10. 音频工具kaldi部署及模型制作调研学习

    语音识别简介 语音识别(speech recognition)技术,也被称为自动语音识别(英语:Automatic Speech Recognition, ASR).计算机语音识别(英语:Comput ...