面向对象

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. dropna fillna

    # NaN 浮点类型   np.nan+1 =>nan Python type(None)  // NoneType类型 不能参与运算 import pandas as pd from pand ...

  2. P1149

    这题不难,我写的一个复杂度 $ O(n^2) $ 的递归算法.. #include <bits/stdc++.h> using namespace std; #define rep(i, ...

  3. Vue-项目搭建时的常用配置

    1.Vue静态资源存放的选择 assets: 编译过程中会被webpack处理理解为模块依赖,只支持相对路径的形式,assets放可能会变动的文件.static: 存放第三方文件的地方,不会被webp ...

  4. Java AQS 的胡言乱语修正版

    前言 适合读者:3 年以上经验的同学 谈到并发编程,基本上都会想到JDK 的 JUC 工具包,它包含 锁,并发工具类,原子类,线程池,还有阻塞队列,这是从网上找的一个大致的知识体系. 相信这些工具读者 ...

  5. 2020年python学习进阶方向

     相信很多友人在学习python过程都会遇到很多 虽然python入门很容易  但是难免会遇到瓶颈 遇到问题没人交流 很难提升   对此 给你们简单指点学习方向  1.认识python linux基本 ...

  6. Linux - 查看端口占用、开放情况

    1. lsof -i : 2. nmap 127.0.0.1 3. sudo netstat -tunlp (不加sudo看不见PID) 4. gufw 参考 https://askubuntu.co ...

  7. 【代码学习】PYTHON 抛出异常

    class ShortInputException(Exception): '''你定义的异常类.''' def __init__(self, length, atleast): Exception. ...

  8. Wireless-MCS

    MCS是modulation and coding scheme的缩写,可以翻译为调制和编码格式,我们可以选择配置该参数,来选择AP和Client之间传输的MCS rate,这些数据速率是使用shor ...

  9. git 操作详情

    Git 教程 1.Git 是一个开源的分布式版本控制系统 2.Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开源版本控制软件 3.Git 与常用的版本控制工具 ...

  10. Linux查看当前系统32位还是64位

    getconf LONG_BIT 此方法会直接返回32或64