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 允许程序员以纯粹的面向过程的方式来使用它,所以人们有时会忽视它那 ...
随机推荐
- php substr的一些用法
//去掉最后一个字符$str = "1,2,3,4,5,6,"; $newstr = substr($str,0,strlen($str)-1); echo $newstr; ub ...
- TOMCAT中文信息乱码改为GBK
# Licensed to the Apache Software Foundation (ASF) under one or more# contributor license agreements ...
- 一个基础的问题 多个$(function(){})里面的函数 为什么在下一个$(function(){})里没法执行。
先看下例子 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <tit ...
- python学习之HTML
1.HTML初知 <!DOCTYPE html> <html lang="en"> <head> html头 <meta charset= ...
- 吴裕雄--天生自然Numpy库学习笔记:NumPy 字符串函数
这些函数在字符数组类(numpy.char)中定义. add() 对两个数组的逐个字符串元素进行连接 multiply() 返回按元素多重连接后的字符串 center() 居中字符串 capitali ...
- Cisco AP-Regulatory Domain
这一note主要解释Regulatory Domain是什么.以较新的思科AP的型号举例,思科AP的PID一般都是按照如下的命名: AIR-AP3802I-H-K9C 按照自己的理解: AIR:其中的 ...
- pip源、搭建虚拟环境、git
一.pip源 1.1 介绍 1.采用国内源,加速下载模块的速度2.常用pip源:-- 豆瓣:https://pypi.douban.com/simple-- 阿里:https://mirrors.al ...
- StudentManagerSSM
web.xml StudentManagerSSM.rar <?xml version="1.0" encoding="UTF-8&quo ...
- 运营商如何关闭2G、3G网络?这事儿得从小灵通说起
5G时代即将全面开启,主流声音是对未来的无限畅想--5G将带来翻天覆地的变化.不过凡事都有利弊两面性,5G作为新生事物固然大有可为,但不可避免地会对旧事物造成巨大冲击.除了会影响很多跟不上潮流发展的行 ...
- java窗口程序字符串时间转成时间戳
pom.xml 文件: ?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...