Python 入门 之 初识面向对象

1、初识面向对象编程 (核心--对象)

(1)观察以下代码:

  1. # 面向过程编程
  2. s = "alexdsb"
  3. count = 0
  4. for i in s:
  5. count += 1
  6. print(count)
  7. s = [1,2,7,3,4,5,]
  8. count = 0
  9. for i in s:
  10. count += 1
  11. print(count)
  12. # 面向对象编程
  13. def my_len(s):
  14. count = 0
  15. for i in s:
  16. count += 1
  17. print(count)
  18. my_len([1,2,3,4,5])

可得出结论:

面向过程 vs 函数式编程

<1> 函数式编程 减少了重复代码
<1> 函数式编程 提高了代码的可读性高

(2)观察以下代码;

  1. # 面向函数编程
  2. def login():
  3. pass
  4. def check_buy_goods():
  5. pass
  6. def change_pwd():
  7. pass
  8. def shopping():
  9. pass
  10. def register():
  11. pass
  12. def check_unbuy_goods():
  13. pass
  14. # 面向对象编程
  15. class Auth:
  16. def login(self):
  17. pass
  18. def register(self):
  19. pass
  20. def change_pwd(self):
  21. pass
  22. class Shopping:
  23. def shopping(self):
  24. pass
  25. def check_buy_goods(self):
  26. pass
  27. def check_unbuy_goods(self):
  28. pass

可以得出结论:

函数式编程 vs 面向对象

<1> 面向对象 代码结构清晰,可读性高
<2> 面向对象使用 上帝思维

2、面向对象初识:

类:对一些事物的统称和概括 (就是具有相同属性和功能的一类事物)

对象:实实在在存在的东西,具有特征和功能 (就是类的具体表现形式)

3、面向对象结构:

class --- 关键字

class 类名: # 类名建议使用驼峰体 函数名建议使用下划线

静态属性(类变量,静态字段)
方法(类方法,动态属性,动态字段)
  1. class People:
  2. mind = "有思想" # 静态属性
  3. def eat(self): # 方法
  4. print("在吃饭")
  5. def work(self):
  6. print("在工作")
  7. class Dog:
  8. hair = "毛" # 静态属性
  9. def eat(self):
  10. print("吃食")
  11. def lick(self):
  12. print("添水")

4、类角度操作类:

  1. class People:
  2. mind = "有思想" # 静态属性
  3. def eat(self): # 方法
  4. print("在吃饭")
  5. def work(self):
  6. print("在工作")

(1)_ dict _查看类下所有内容

  1. print(People.__dict__) # __dict__ 只能查看当前空间下的内容

(2). 万能的点 查看单个属性或方法

  1. print(People.mind) # 类名.属性名

一般情况我们不使用类名去操作方法(类方法)

(3)增:

  1. People.emotion = "有情感"

(4)删:

  1. del People.mind

(5)改:

  1. People.mind = "无脑"

(6)查:

  1. print(People.mind) #类名.属性名 单独查一个
  2. print(People.__dict__) # 查看类下所有的

5、对象角度操作类:

  1. class People:
  2. mind = "有思想" # 静态属性
  3. def eat(self): # 方法
  4. print("self --->",self)
  5. print("在吃饭")
  6. def work(self):
  7. print("在工作")
  8. # 创建对象 -- 类名()
  9. p = People() # 实例化对象
  10. print(p.__dict__) # 对象的空间
  11. print("p---->",p)
  12. print(p.mind)
  13. p.eat()
  14. p.work()
  1. class People:
  2. mind = "有思想" # 静态属性
  3. def __init__(self,name,age,sex): # 初始化
  4. # self == p
  5. self.name = name
  6. self.age = age
  7. self.sex = sex
  8. def eat(self): # 方法
  9. print(self.name)
  10. print("在吃饭")
  11. def work(self):
  12. print("在工作")
  13. p = People("marry",19,"男") # 实例化一个对象
  14. p.eat()

可以在类的外部给对象创建属性,但不建议这样使用

  1. p.mind = "无脑" # 给对象创了一个属性
  2. print(People.__dict__)
  3. print(p.__dict__) # 对象查询对象中所有属性

(1)对象只能使用类中的属性和方法,不能进行修改

(2)实例化一个对象总共发生了三件事:

<1> 实例化一个对象,给对象开辟空间

<2> 自动执行_ init_ 方法

<3> 自动将对象的地址隐性传递给了self

6、self 是什么?

(1)就是函数的位置参数

(2)实例化对象的本身(对象和self指向同一内存地址)

  1. class People:
  2. mind = "有思想" # 静态属性
  3. def __init__(self,name,age,sex,high=None): # 初始化(给创建的对象封装独有属性)
  4. # self == p 地址相同
  5. self.name = name
  6. self.age = age
  7. self.sex = sex
  8. if high:
  9. self.high = high
  10. def eat(self): # 方法
  11. print(f"{self.name}在吃饭")
  12. def work(self):
  13. print("在工作")
  14. p1 = People("jim",19,"未知",170) # 实例化一个对象
  15. p2 = People("kuqir",19,"未知",170) # 实例化一个对象
  16. p3 = People("diva",19,"未知",170) # 实例化一个对象
  17. p4 = People("李玲",19,"未知",170) # 实例化一个对象
  18. p5 = People("好哥",19,"未知",170) # 实例化一个对象
  19. p1.eat()
  20. p2.eat()

7.类空间

(1)给对象空间添加属性:

对象的属性不仅可以在_ _init__里面添加,还可以在类的其他方法或者类的外面添加

  1. class A:
  2. def __init__(self,name):
  3. # 类里边给对象添加属性
  4. self.name = name
  5. def func(self,sex):
  6. self.sex = sex
  7. a = A("jim")
  8. a.func("男")
  9. # 类外边给对象添加属性
  10. a.age = 18
  11. print(a.__dict__)
  12. # 总结:给对象空间添加属性可以在类的内部,类的外部,类中的方法

(2)给类空间添加属性:

类的静态属性不仅可以在内部添加,还可以在类的外部添加

  1. class A:
  2. def __init__(self,name):
  3. # 类内部给类空间添加属性
  4. A.name = name
  5. def func(self,age):
  6. # 类中的方法给类空间添加属性
  7. A.age = age
  8. 类外部给类空间添加属性
  9. A.name = "alex"
  10. a = A('meet')
  11. a.func(19)
  12. print(A.__dict__)
  13. # 总结:给类空间添加属性可以在类的内部,类的外部,类中的方法

8、面向对象中的查找顺序

对象查找属性的顺序:先从对象空间找 ——> 类空间找——>父类空间找——>·········

类名查找属性的顺序:先从本类空间找 ——> 父类空间找——>······

上面的顺序都是单向不可逆的,类名不可能找到对象的属性。(对象之所以可以找到类,是因为对象空间中有类对象指针这么个东西)

Python 入门 之 初识面向对象的更多相关文章

  1. python之路--初识面向对象

    一 . 初识面向对象 面向过程: 一切以事务的发展流程为中心. 面向对象: 一切以对象为中心. 一切皆为对象. 具体的某一个事务就是对象 打比方: 大象进冰箱 步骤: 第一步, 开门, 第二步, 装大 ...

  2. python之路----初识面向对象(二)

    类命名空间与对象.实例的命名空间 创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性 而类有两种属性:静态属性和动态属性 静态属性就是直接在类中定义的变量 动态属性就 ...

  3. 【学习笔记】--- 老男孩学Python,day16-17 初识面向对象,类名称空间,查询顺序,组合

    面向过程 VS 面向对象 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程序的复 ...

  4. Python入门基础学习(面向对象)

    Python基础学习笔记(四) 面向对象的三个基本特征: 封装:把客观事物抽象并封装成对象,即将属性,方法和事件等集合在一个整体内 继承:允许使用现有类的功能并在无须重新改写原来的类情况下,对这些功能 ...

  5. python 入门基础21 --面向对象_多态、内置方法、反射

    内容: 1.接口思想 2.抽象类思想 3.多态 4.内置方法 5.反射 1.接口思想 建立关联的桥梁,方便管理代码 接口类:用来定义功能的类,位继承它的子类提供功能 该类的功能方法一般不需要实现体,实 ...

  6. Python 入门基础19 --面向对象、封装

    2019.04.17 一.面向对象与面向过程 二.名称空间操作 三.类与对象的概念 四.语法 五.对象查找属性的顺序 2019.04.18 1.类与对象的所有概念:__init__方法 2.类的方法与 ...

  7. Python入门1 —— 初识Python

    一:Python介绍 1.Python是什么? Python是一门编程语言,编程语言是一门语言. 语言就是一个事物与另一个事物沟通的工具. 而编程语言则是人与计算机沟通的介质. 2.为什么要跟计算机沟 ...

  8. Python 入门基础20 --面向对象_继承、组合

    今日内容 组合:自定义类的对象作为类的属性 继承:父类与子类.多继承 1.组合 将自定义类的对象作为类的属性 class Teacher: def __init__(self, name): self ...

  9. Python入门 - 面向对象

    python很好的支持面向对象编程,本节主讲类的定义,类的构造方法,类的继承与方法重写,类的多继承. 一.类的定义 class Myclass() : def prt(self, str) : pri ...

随机推荐

  1. 使用matplotlib绘制常用图表(2)-常用图标设置

    一.使用subplots绘制子图 import numpy as np from matplotlib import pyplot as plt %matplotlib inline x = np.a ...

  2. getFieldDecorator用法(三)——Table增删改

    后台管理系统常用到表单的增删改,这里也做了个封装 例如:user/index.js import React from 'react' import { Card, Button, Table, Fo ...

  3. ansible模块文件操作

    Ansible常用模块文件操作 [root@tiandong etc]# ansible-doc -l   列出ansible所支持的模块 [root@tiandong ~]# ansible-doc ...

  4. cocos2dx热更新之后,闪退问题记录。

    如果使用cocos2dx的3.17.2版本的官方热更新. 然后有玩家反馈说热更新之后游戏闪退,游戏内有部分资源没更到. 考虑如下几个方面调整. 1,在文件下载失败的时候,直接调用重新下载. 2,把下载 ...

  5. flask 第八篇 实例化flask时的参数配置

    Flask 是一个非常灵活且短小精干的web框架 , 那么灵活性从什么地方体现呢? 有一个神奇的东西叫 Flask配置 , 这个东西怎么用呢? 它能给我们带来怎么样的方便呢? 首先展示一下: from ...

  6. C++入门经典-例9.4-默认模板参数

    1:默认模板参数就是在类模板定义时设置类型形式参数表中的一个类型参数的默认值,该默认值是一个数据类型.有了默认的数据类型参数后,在定义模板的新类型时就可以不进行指定.代码如下: // 9.4.cpp ...

  7. leetcode题目11.盛最多水的容器(中等)

    题目描述: 给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找出其 ...

  8. TCP输入 之 快速路径和慢速路径

    概述 快速路径:用于处理预期的,理想情况下的数据段,在这种情况下,不会对一些边缘情形进行检测,进而达到快速处理的目的: 慢速路径:用于处理那些非预期的,非理想情况下的数据段,即不满足快速路径的情况下数 ...

  9. nginx中location匹配规则介绍

    一,匹配规则 1,= 表示精确匹配 例子:http://localhost/  将匹配到 location = / {...} http://localhost/aaa  可以匹配到 location ...

  10. Struts2与Servlet API的解耦访问