python之对象基础
面向对象
1. 面向过程编程的优缺点
优点:逻辑清晰
缺点:扩展性差(上一个函数的输出是下一个函数的输入)
2. 面向对象编程的优缺点
对象就是特征和技能的结合体
面向对象编程:一个个对象进行交互
优点:扩展性强
缺点:逻辑复杂
3. 类
类和函数的区别
- 函数在定义阶段,只检查语法,不执行代码
- 类在定义阶段,会运行代码
什么是类
类(类别):一系列具有相同特征和技能的集合
现实世界中先有对象,后有类
# 定义学生
# 姓名: 猪瑞星
# 学号: 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
'''
总结:
- 类中的函数self形参,当类调用时,self即表示传入的参数
- 类中的函数self形参,当实例化对象调用时,self即表示实例化对象本身
对象的高度整合
对象有一大堆属性/数据,还会有一大堆方法来操作这些属性。然后对于不同的对象,这些属性又不同。
python之对象基础的更多相关文章
- Python - 面对对象(基础)
目录 Python - 面对对象(基础) 一. 概述 二. 创建类和对象 三. 面向对象三大特征 封装 继承 多态 Python - 面对对象(基础) 一. 概述 面向过程:根据业务逻辑从上到下写垒代 ...
- python 面对对象基础
目录 面向对象基础 面向对象编程(抽象) 类与对象 给对象定制独有的特征 对象的属性查找顺序 类与对象的绑定方法 类与数据类型 对象的高度整合 面向对象基础 面向对象编程(抽象) 回顾一下 面向过程编 ...
- Python数据分析学习(二):Numpy数组对象基础
1.1数组对象基础 .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { bord ...
- 深入理解python(一)python语法总结:基础知识和对python中对象的理解
用python也用了两年了,趁这次疫情想好好整理下. 大概想法是先对python一些知识点进行总结,之后就是根据python内核源码来对python的实现方式进行学习,不会阅读整个源码,,,但是应该会 ...
- Python学习笔记基础篇——总览
Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...
- Python 3 集合基础和概念!
Python 3 集合基础和概念! Python 3中,集合是无序的,所以不能进行切片和索引操作. 创建集合有两个方法:set()方法创建的集合是可变的,可被迭代的:frozenset()方法创建的集 ...
- Python进阶 - 对象,名字以及绑定
Python进阶 - 对象,名字以及绑定 1.一切皆对象 Python哲学: Python中一切皆对象 1.1 数据模型-对象,值以及类型 对象是Python对数据的抽象.Python程序中所有的数据 ...
- [Python] 文科生零基础学编程系列二——数据类型、变量、常量的基础概念
上一篇:[Python] 文科生零基础学编程系列--对象.集合.属性.方法的基本定义 下一篇: (仍先以最简单的Excel的VBA为例,语法与Python不同,但概念和逻辑需要理解透彻) p.p1 { ...
- 帮Python找“对象”
引言:你一定会感叹:Python还缺找对象? 毕竟"一切皆对象"是人家Python的哲学理念.不过,Python 允许程序员以纯粹的面向过程的方式来使用它,所以人们有时会忽视它那 ...
随机推荐
- 支付接口API
//微信支付SDK https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1
- 【MySQL】多表查询
" 目录 多表链接查询 笛卡尔积 内链接 inner join 外链接之左链接 left join 外链接之右链接 right join 全外链接 符合条件链接查询 子查询 先准备两张表:部 ...
- abp方法权限
一.自定义一个权限实体,也可以直接用abp的PermissionNames类 二.重写PermissionChecker中的IsGrantedAsync方法 public override async ...
- 「JSOI2015」子集选取
「JSOI2015」子集选取 传送门 看到这个数据范围,就知道肯定是要找规律. 如果把集合看成一个长度为 \(n\) 的 \(01\) 串, \(0\) 表示没有这个元素, \(1\) 表示有这个元素 ...
- SpringBoot Profiles特性
今天我们了解SpringBoot Profiles特性 一.外部化配置 配置分为编译时和运行时,而Spring采用后者,在工作中有时也会两者一起使用. 何为"外部化配置"官方没 ...
- 4_2 刽子手游戏(UVa489)<自顶向下逐步求精法>
Hangman Judge是一个猜英文单字的小游戏(在电子字典中常会看到),游戏规则如下:1.答案单字写在纸上(每个字元一张纸),并且被盖起来,玩家每次猜一个英文字元(letter).2.如果这个英文 ...
- pywinauto教程
转:pywinauto教程https://blog.csdn.net/weixin_40161673/article/details/83246861 ** 一.环境安装**1.命令行安装方法pip ...
- 吴裕雄 python 神经网络——TensorFlow训练神经网络:MNIST最佳实践
import os import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data INPUT_N ...
- 杭电 1059 Dividing
Dividing Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- Golang介绍以及安装
Go语言 Google开源 编译形语言 21世纪的C语言 Go语言的特点 简单易并发 开发效率高 执行性能好 Go语言应用的领域 服务端开发 日志处理 文件系统 监控服务 容器虚拟化 Docker k ...