Python 入门 之 初识面向对象
Python 入门 之 初识面向对象
1、初识面向对象编程 (核心--对象)
(1)观察以下代码:
# 面向过程编程
s = "alexdsb"
count = 0
for i in s:
count += 1
print(count)
s = [1,2,7,3,4,5,]
count = 0
for i in s:
count += 1
print(count)
# 面向对象编程
def my_len(s):
count = 0
for i in s:
count += 1
print(count)
my_len([1,2,3,4,5])
可得出结论:
面向过程 vs 函数式编程
<1> 函数式编程 减少了重复代码
<1> 函数式编程 提高了代码的可读性高
(2)观察以下代码;
# 面向函数编程
def login():
pass
def check_buy_goods():
pass
def change_pwd():
pass
def shopping():
pass
def register():
pass
def check_unbuy_goods():
pass
# 面向对象编程
class Auth:
def login(self):
pass
def register(self):
pass
def change_pwd(self):
pass
class Shopping:
def shopping(self):
pass
def check_buy_goods(self):
pass
def check_unbuy_goods(self):
pass
可以得出结论:
函数式编程 vs 面向对象
<1> 面向对象 代码结构清晰,可读性高
<2> 面向对象使用 上帝思维
2、面向对象初识:
类:对一些事物的统称和概括 (就是具有相同属性和功能的一类事物)
对象:实实在在存在的东西,具有特征和功能 (就是类的具体表现形式)
3、面向对象结构:
class --- 关键字
class 类名: # 类名建议使用驼峰体 函数名建议使用下划线
静态属性(类变量,静态字段)
方法(类方法,动态属性,动态字段)
class People:
mind = "有思想" # 静态属性
def eat(self): # 方法
print("在吃饭")
def work(self):
print("在工作")
class Dog:
hair = "毛" # 静态属性
def eat(self):
print("吃食")
def lick(self):
print("添水")
4、类角度操作类:
class People:
mind = "有思想" # 静态属性
def eat(self): # 方法
print("在吃饭")
def work(self):
print("在工作")
(1)_ dict _查看类下所有内容
print(People.__dict__) # __dict__ 只能查看当前空间下的内容
(2). 万能的点 查看单个属性或方法
print(People.mind) # 类名.属性名
一般情况我们不使用类名去操作方法(类方法)
(3)增:
People.emotion = "有情感"
(4)删:
del People.mind
(5)改:
People.mind = "无脑"
(6)查:
print(People.mind) #类名.属性名 单独查一个
print(People.__dict__) # 查看类下所有的
5、对象角度操作类:
class People:
mind = "有思想" # 静态属性
def eat(self): # 方法
print("self --->",self)
print("在吃饭")
def work(self):
print("在工作")
# 创建对象 -- 类名()
p = People() # 实例化对象
print(p.__dict__) # 对象的空间
print("p---->",p)
print(p.mind)
p.eat()
p.work()
class People:
mind = "有思想" # 静态属性
def __init__(self,name,age,sex): # 初始化
# self == p
self.name = name
self.age = age
self.sex = sex
def eat(self): # 方法
print(self.name)
print("在吃饭")
def work(self):
print("在工作")
p = People("marry",19,"男") # 实例化一个对象
p.eat()
可以在类的外部给对象创建属性,但不建议这样使用
p.mind = "无脑" # 给对象创了一个属性
print(People.__dict__)
print(p.__dict__) # 对象查询对象中所有属性
(1)对象只能使用类中的属性和方法,不能进行修改
(2)实例化一个对象总共发生了三件事:
<1> 实例化一个对象,给对象开辟空间
<2> 自动执行_ init_ 方法
<3> 自动将对象的地址隐性传递给了self
6、self 是什么?
(1)就是函数的位置参数
(2)实例化对象的本身(对象和self指向同一内存地址)
class People:
mind = "有思想" # 静态属性
def __init__(self,name,age,sex,high=None): # 初始化(给创建的对象封装独有属性)
# self == p 地址相同
self.name = name
self.age = age
self.sex = sex
if high:
self.high = high
def eat(self): # 方法
print(f"{self.name}在吃饭")
def work(self):
print("在工作")
p1 = People("jim",19,"未知",170) # 实例化一个对象
p2 = People("kuqir",19,"未知",170) # 实例化一个对象
p3 = People("diva",19,"未知",170) # 实例化一个对象
p4 = People("李玲",19,"未知",170) # 实例化一个对象
p5 = People("好哥",19,"未知",170) # 实例化一个对象
p1.eat()
p2.eat()
7.类空间
(1)给对象空间添加属性:
对象的属性不仅可以在_ _init__里面添加,还可以在类的其他方法或者类的外面添加
class A:
def __init__(self,name):
# 类里边给对象添加属性
self.name = name
def func(self,sex):
self.sex = sex
a = A("jim")
a.func("男")
# 类外边给对象添加属性
a.age = 18
print(a.__dict__)
# 总结:给对象空间添加属性可以在类的内部,类的外部,类中的方法
(2)给类空间添加属性:
类的静态属性不仅可以在内部添加,还可以在类的外部添加
class A:
def __init__(self,name):
# 类内部给类空间添加属性
A.name = name
def func(self,age):
# 类中的方法给类空间添加属性
A.age = age
类外部给类空间添加属性
A.name = "alex"
a = A('meet')
a.func(19)
print(A.__dict__)
# 总结:给类空间添加属性可以在类的内部,类的外部,类中的方法
8、面向对象中的查找顺序
对象查找属性的顺序:先从对象空间找 ——> 类空间找——>父类空间找——>·········
类名查找属性的顺序:先从本类空间找 ——> 父类空间找——>······
上面的顺序都是单向不可逆的,类名不可能找到对象的属性。(对象之所以可以找到类,是因为对象空间中有类对象指针这么个东西)
Python 入门 之 初识面向对象的更多相关文章
- python之路--初识面向对象
一 . 初识面向对象 面向过程: 一切以事务的发展流程为中心. 面向对象: 一切以对象为中心. 一切皆为对象. 具体的某一个事务就是对象 打比方: 大象进冰箱 步骤: 第一步, 开门, 第二步, 装大 ...
- python之路----初识面向对象(二)
类命名空间与对象.实例的命名空间 创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性 而类有两种属性:静态属性和动态属性 静态属性就是直接在类中定义的变量 动态属性就 ...
- 【学习笔记】--- 老男孩学Python,day16-17 初识面向对象,类名称空间,查询顺序,组合
面向过程 VS 面向对象 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程序的复 ...
- Python入门基础学习(面向对象)
Python基础学习笔记(四) 面向对象的三个基本特征: 封装:把客观事物抽象并封装成对象,即将属性,方法和事件等集合在一个整体内 继承:允许使用现有类的功能并在无须重新改写原来的类情况下,对这些功能 ...
- python 入门基础21 --面向对象_多态、内置方法、反射
内容: 1.接口思想 2.抽象类思想 3.多态 4.内置方法 5.反射 1.接口思想 建立关联的桥梁,方便管理代码 接口类:用来定义功能的类,位继承它的子类提供功能 该类的功能方法一般不需要实现体,实 ...
- Python 入门基础19 --面向对象、封装
2019.04.17 一.面向对象与面向过程 二.名称空间操作 三.类与对象的概念 四.语法 五.对象查找属性的顺序 2019.04.18 1.类与对象的所有概念:__init__方法 2.类的方法与 ...
- Python入门1 —— 初识Python
一:Python介绍 1.Python是什么? Python是一门编程语言,编程语言是一门语言. 语言就是一个事物与另一个事物沟通的工具. 而编程语言则是人与计算机沟通的介质. 2.为什么要跟计算机沟 ...
- Python 入门基础20 --面向对象_继承、组合
今日内容 组合:自定义类的对象作为类的属性 继承:父类与子类.多继承 1.组合 将自定义类的对象作为类的属性 class Teacher: def __init__(self, name): self ...
- Python入门 - 面向对象
python很好的支持面向对象编程,本节主讲类的定义,类的构造方法,类的继承与方法重写,类的多继承. 一.类的定义 class Myclass() : def prt(self, str) : pri ...
随机推荐
- Python3学习笔记(十八):文件上传和下载
文件上传 以人人网上传头像为例,用Fiddler抓取的上传头像接口报文如下 上传头像图片代码: import requests upload_url = 'http://upload.renren.c ...
- JIRA绑定邮箱
[管理-系统-外发邮件] 之前配置QQ邮箱没有成功,后来使用阿里邮箱一次就成功了 [保存]成功后可以测试一下
- Yum:[Errno 5] [Errno 2] No such file or directory
出现这样的问题,就是因为之前python2升级到python3之后,yum有些配置文件定位不到之前的python2了,所以这里需要改掉两个配置文件就不会出事了. yum安装软件时,可以连接yum 仓库 ...
- C++入门经典-例7.9-对象数组,批量化生产
1:在数组内容中我们了解到,数组是通过指针分配到的一段额定大小的内容.同样,数组也可以包含对象.声明对象数组的形式如下: box boxArray[5]; box boxArray2[2]={box( ...
- python3笔记二十:时间操作time
一:学习内容 time时间戳 time元组 time字符串 time时间转换图解 二:time 需要引入:import time 1.概念 UTC(世界协调时间):格林尼治天文时间,世界标准时间,在中 ...
- PHP压缩图片并模糊处理(抄的哟)
class image_blur{ /** * 图片高斯模糊(适用于png/jpg/gif格式) * @param $srcImg 原图片 * @param $savepath 保存路径 * @par ...
- android 知识体系
- ReentrantLock源码探究1:非公平锁的获取和释放
1.AQS简单介绍 Sync是ReentrantLock的一个内部类,它继承了AbstractQueuedSynchronizer,即AQS,在CountDownLatch.FutureTask. ...
- linux性能分析之平均负载
平均负载 1,执行 top 或者 uptime 命令 来了解系统负载 uptime 分析显示 当前时间,系统运行时间,正在登录用户数 平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程 ...
- java集合(List,Set,Map)详细总结
一,集合的由来: 数组是长度是固定的,当添加的元素超过数组的长度时需要对数组重新定义,太麻烦了,java内部给我们提供了集合类,能存储任意对象,长度是可以改变的,随着元素的增加而增加,随着元素的减少而 ...