面向对象

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. Laravel Vuejs 实战:开发知乎 (8)美化编辑器

    1.使用UEditor增量包: simple-ueditors 执行下载: git clone https://github.com/JellyBool/simple-ueditor.git 2.用此 ...

  2. Python解决RSA加密

    最近爬个网站需要用发现密码是通过RSA加密的,因此找网上python加密例子,发现都没有一个比较完整的demo so,自己写一个吧~ 首先,安装相应的库: 1. pyCrypto : pip inst ...

  3. Python中令人迷惑的4个引用

    第一个:执行时机的差异 1. array = [1, 8, 15] g = (x for x in array if array.count(x) > 0) array = [2, 8, 22] ...

  4. Nexus-FEX基础配置

    1.FEX基本配置feature fex fex 100  pinning max-links 1  >>>>该值默认就是1  description "FEX100 ...

  5. Git 工作区、暂存区和版本库、操作流程

    Git 工作区.暂存区和版本库 基本概念 我们先来理解下Git 工作区.暂存区和版本库概念 工作区:就是你在电脑里能看到的目录. 暂存区:英文叫stage, 或index.一般存放在 ".g ...

  6. Codeforces Round #611 (Div. 3) D

    There are nn Christmas trees on an infinite number line. The ii -th tree grows at the position xixi ...

  7. HDU 4699 Editor(模拟 对顶栈)

    题目大意: 给定一个整数序列 维护5种操作 次数<1e6 I x: 光标位置插入x 然后光标位于x之后 D: 删除光标前一个数 L: 光标左移 R: 光标右移 Q k: 询问位置k之前的最大前缀 ...

  8. ES-elasticsearch安装-linux

    (1)安装JDK(ES是使用java开发的) (2)安装ES(虚拟机内存大于一个g) 1)创建普通用户启动 2)非常占用内存(默认1个g的内存) (3)创建一个普通用户(用于启动ES) groupad ...

  9. 自定义 Laravel 5.7 - 6.X 中验证邮箱的标题文本

    原理解析: 验证邮箱在Laravel默认实现中是一个Notification,不是Mailable,而为了自定义验证邮箱的默认配置,我们先来查看一下 /vendor/laravel/framework ...

  10. lora

    Lora:特点 距离远,功耗低,不用sim卡和流量,秒级实时性,每秒几十kbps. 阿里与lora: 之前LoRa芯片只有Semtech一家企业掌握着LoRa芯片命脉,人们担心LoRa芯片不够丰富不能 ...