面向对象基础

面向过程编程

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

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

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

面向对象编程

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

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

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

什么是类

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

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

如何定义类

  • 定义类的规则:

    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. MD5 加盐加密

    一.概述 MD5(Message Digest  Algorithm 5),是一种散列算法,是不可逆的,即通过md5加密之后没办法得到原文,没有解密算法. 在一般的项目中都会有登录注册功能,最简单的, ...

  2. Zabbix安装部署实践

    操作系统: [root@mysql ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) Mysql :     版本5.7 ...

  3. PowerMock学习(三)之Mock局部变量

    编写powermock用例步骤: 类上面先写这两个注解@RunWith(PowerMockRunner.class).@PrepareForTest(StudentService.class) 先模拟 ...

  4. 安卓手机运行fedora

    安卓手机使用容器运行其他linux,一般两种: 1. termux + rootfs.img + proot,依赖api>=21,不必root但受限. 2. linuxdeploy + proo ...

  5. opencv 5 图像转换(2 霍夫变换)

    霍夫线变换 标准霍夫变换和多尺度霍夫变换(HoughLines()函数) 实例: #include <opencv2/opencv.hpp> #include <opencv2/im ...

  6. JavaWeb04-JSP及会话跟踪技术

    JSP入门 1 JSP概述 1.1 什么是JSP JSP(Java Server Pages)是JavaWeb服务器端的动态资源.它与html页面的作用是相同的,显示数据和获取数据. 1.2 JSP的 ...

  7. tornado install

    pip install tornado Linux 安装时注意库的安装路径和执行时寻找路径是否一样 Windows 安装时注意user是否有权限 解决办法:

  8. k8s Ingress 理解和部署

    目录 前言 Ingress 与 ingress-controller Ingress 部署 1.部署 ingress-controller 2.部署测试 web 服务 3.部署 Ingress 4.检 ...

  9. linux目录相关操作

    mkdir:新建目录 mkdir [-mp] 目录名称 -m:配置文件权限,直接设置,不需要看默认权限(umask) -p:递归创建目录 rmdir:删除空目录 rmdir [-p] 目录名称 -p: ...

  10. 献给那些想自建站搭建博客的新人们(实篇)wordpress

    实验材料 windows或者linux(因为我是大学操作系统学的是windows,后来服务器转向了linux,所以我将针对window和linux分别进行开展) xampp(最佳php5.6 在7.1 ...