面向对象

1. 面向过程编程的优缺点

优点:逻辑清晰

缺点:扩展性差(上一个函数的输出是下一个函数的输入)

2. 面向对象编程的优缺点

对象就是特征和技能的结合体

面向对象编程:一个个对象进行交互

优点:扩展性强

缺点:逻辑复杂

3. 类

类和函数的区别

  1. 函数在定义阶段,只检查语法,不执行代码
  2. 类在定义阶段,会运行代码

什么是类

类(类别):一系列具有相同特征和技能的集合

现实世界中先有对象,后有类

# 定义学生

    # 姓名: 猪瑞星
# 学号: 222222
# 学校: wuda
# 技能: 选课,三十六变 # 姓名: 孔悟空
# 学号: 111111
# 学校: wuda
# 技能: 选课,七十二变 # 姓名: 雷公
# 学号: 666666
# 学校: wuda
# 技能: 选课,电闪雷鸣,开车 # 定义老师 # 姓名:tank
# 学校:wuda
# 技能:教课,piao # 姓名:nick
# 学校:wuda
# 技能:教课,看书

python中先有类,再有对象

class 类名(驼峰体):  # 定义类,会直接运行类体代码
# 定义一系列特征
# 定义一系列方法 对象1 = 类名() # 实例化出对象

对象

如何实例化一个对象

class student(object):
count = 0
def __init__(self,name,Student_ID,school_name):
self.name = name
self.Student_ID = Student_ID
self.school_name = school_name def xuanke(self):
print(f'{self.name} 正在选课') print(student.__dict__) # 会显示student类的所有属性
a_stu = student('plf','11111','北大') # 实例化时,第一个调用__init__方法
a_stu.xuanke() # 调用选课系统 '''
{'__module__': '__main__', 'count': 0, '__init__': <function student.__init__ at 0x00000110AA7F0A60>, 'xuanke': <function student.xuanke at 0x00000110AA7F0AE8>, '__dict__': <attribute '__dict__' of 'student' objects>, '__weakref__': <attribute '__weakref__' of 'student' objects>, '__doc__': None}
plf 正在选课
'''

对象属性查找顺序

class OldBoyStudent:
school = 'oldboy'
name = 'c' def __init__(self, name ,age):
self.name = name
self.age = age def choose_course(self):
print('is choosing course') stu1 = OldBoyStudent('a',1)
print(stu1.school) stu2 = OldBoyStudent('b',2)
print(stu2.scool)

先在实例对象本身的名称空间中查找,如果没有就会去类中查找,类中没有找到就会报错

类与对象的绑定方法

class OldBoyStudent:
school = 'oldboy' def __init__(self, name ,age):
self.name = name
self.age = age def choose_course(self):
print(id(self)) # 10000
print(self.school)
print(f'{self.name} is choosing course') stu1 = OldBoyStudent('a',1)
stu1.choose_course() # self是对象本身
print(id(stu1)) # 10000 OldBoyStudent.choose_course(stu1)

类与数据类型

lis = list([1,2,3])
lis2 = list([1,2,3]) # 增加一个元素
lis.append(4)
# 换一种写法
list.append(lis,5) # 总结:数据类型其实都是对象。数据类型的内置方法,都是对象的方法

如何证明类中函数的参数self是实例对象本身

分两种情况:1. 类的情况,2.实例本身

当实例去调用 "jiaoxue"函数时

class teacher():

    count =  0

    def __init__(self,name,school,age,sex):
self.name = name
self.school = school
self.age = age
self.sex = sex
teacher.count += 1
def jiaoxue(self):
print(self)
print(f'类中函数的self的内存地址为:{id(self)}') one = teacher('plf','武大','23','男')
print(f"初始化对象的内存地址为:{id(one)}")
one.jiaoxue() teacher.jiaoxue(111) '''
初始化对象的内存地址为:1171091425992
<__main__.teacher object at 0x00000110AA7D0AC8>
类中函数的self的内存地址为:1171091425992
'''

当类去调用“jiaoxue” 函数时

class teacher():
count = 0
def __init__(self,name,school,age,sex):
self.name = name
self.school = school
self.age = age
self.sex = sex
teacher.count += 1 def jiaoxue(self):
print(self)
print(f'类中函数的self的内存地址为:{id(self)}')
teacher.jiaoxue(111) # 随意传入一个数据,正常情况下我们可以传入teacher类的对象 '''
111
类中函数的self的内存地址为:1345944480 '''

总结:

  1. 类中的函数self形参,当类调用时,self即表示传入的参数
  2. 类中的函数self形参,当实例化对象调用时,self即表示实例化对象本身

对象的高度整合

对象有一大堆属性/数据,还会有一大堆方法来操作这些属性。然后对于不同的对象,这些属性又不同。

python之对象基础的更多相关文章

  1. Python - 面对对象(基础)

    目录 Python - 面对对象(基础) 一. 概述 二. 创建类和对象 三. 面向对象三大特征 封装 继承 多态 Python - 面对对象(基础) 一. 概述 面向过程:根据业务逻辑从上到下写垒代 ...

  2. python 面对对象基础

    目录 面向对象基础 面向对象编程(抽象) 类与对象 给对象定制独有的特征 对象的属性查找顺序 类与对象的绑定方法 类与数据类型 对象的高度整合 面向对象基础 面向对象编程(抽象) 回顾一下 面向过程编 ...

  3. Python数据分析学习(二):Numpy数组对象基础

    1.1数组对象基础 .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { bord ...

  4. 深入理解python(一)python语法总结:基础知识和对python中对象的理解

    用python也用了两年了,趁这次疫情想好好整理下. 大概想法是先对python一些知识点进行总结,之后就是根据python内核源码来对python的实现方式进行学习,不会阅读整个源码,,,但是应该会 ...

  5. Python学习笔记基础篇——总览

    Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...

  6. Python 3 集合基础和概念!

    Python 3 集合基础和概念! Python 3中,集合是无序的,所以不能进行切片和索引操作. 创建集合有两个方法:set()方法创建的集合是可变的,可被迭代的:frozenset()方法创建的集 ...

  7. Python进阶 - 对象,名字以及绑定

    Python进阶 - 对象,名字以及绑定 1.一切皆对象 Python哲学: Python中一切皆对象 1.1 数据模型-对象,值以及类型 对象是Python对数据的抽象.Python程序中所有的数据 ...

  8. [Python] 文科生零基础学编程系列二——数据类型、变量、常量的基础概念

    上一篇:[Python] 文科生零基础学编程系列--对象.集合.属性.方法的基本定义 下一篇: (仍先以最简单的Excel的VBA为例,语法与Python不同,但概念和逻辑需要理解透彻) p.p1 { ...

  9. 帮Python找“对象”

    引言:你一定会感叹:Python还缺找对象? 毕竟"一切皆对象"是人家Python的哲学理念.不过,Python  允许程序员以纯粹的面向过程的方式来使用它,所以人们有时会忽视它那 ...

随机推荐

  1. 支付接口API

    //微信支付SDK https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1

  2. 【MySQL】多表查询

    " 目录 多表链接查询 笛卡尔积 内链接 inner join 外链接之左链接 left join 外链接之右链接 right join 全外链接 符合条件链接查询 子查询 先准备两张表:部 ...

  3. abp方法权限

    一.自定义一个权限实体,也可以直接用abp的PermissionNames类 二.重写PermissionChecker中的IsGrantedAsync方法 public override async ...

  4. 「JSOI2015」子集选取

    「JSOI2015」子集选取 传送门 看到这个数据范围,就知道肯定是要找规律. 如果把集合看成一个长度为 \(n\) 的 \(01\) 串, \(0\) 表示没有这个元素, \(1\) 表示有这个元素 ...

  5. SpringBoot Profiles特性

    今天我们了解SpringBoot Profiles特性 一.外部化配置  配置分为编译时和运行时,而Spring采用后者,在工作中有时也会两者一起使用.  何为"外部化配置"官方没 ...

  6. 4_2 刽子手游戏(UVa489)<自顶向下逐步求精法>

    Hangman Judge是一个猜英文单字的小游戏(在电子字典中常会看到),游戏规则如下:1.答案单字写在纸上(每个字元一张纸),并且被盖起来,玩家每次猜一个英文字元(letter).2.如果这个英文 ...

  7. pywinauto教程

    转:pywinauto教程https://blog.csdn.net/weixin_40161673/article/details/83246861 ** 一.环境安装**1.命令行安装方法pip ...

  8. 吴裕雄 python 神经网络——TensorFlow训练神经网络:MNIST最佳实践

    import os import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data INPUT_N ...

  9. 杭电 1059 Dividing

    Dividing Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  10. Golang介绍以及安装

    Go语言 Google开源 编译形语言 21世纪的C语言 Go语言的特点 简单易并发 开发效率高 执行性能好 Go语言应用的领域 服务端开发 日志处理 文件系统 监控服务 容器虚拟化 Docker k ...