面向对象讲解:

‘’‘

面向过程:

核心是过程二字,过程指的是问题的解决步骤,基于过程去设计程序,就好比在设计一条流水线,是一种机械式的思维方式。

优点:复杂的问题流程化,进而简单化

缺点:可扩展性差

应用场景:脚本程序,比如说linux系统管理

面向对象:

核心是对象二字,对象就是特征与技能的结合体。如果把设计程序比喻成创造一个世界,那你就是这个世界的上帝,与面向过程对机械流水的模拟,面向对象更加注重对现实世界的模拟。

优点:可扩展性强

’‘’

类即种别,类别,对象是特征与技能的结合体,那么类就是一系列对象相似的特征与技能的集合体。

在现实世界中,先有一个个具体存在的对象(总结相似之处),得到现实中的类。

在程序中:一定是先定义类,后调用类来产生对象。

第一阶段:现实中的对象总结出现实中的类

obj1:

  特征:学校=oldboy,名字=李大泡,年龄=18,性别=女

  技能:吃饭,学习,睡觉

obj2:

  特征:学校=oldboy,名字=张全丹,年龄=28,性别=男

  技能:吃饭,学习,睡觉

obj1:

  特征:学校=oldboy,名字=牛柳蛋,年龄=18,性别=女

  技能:吃饭,学习,睡觉

第二阶段:程序中的类产生程序中的对象

 class OldboyStudent:
school = 'oldboy' #类的数据属性
def learn(self): #类的函数属性
print('is learning') def eat(self):
print('is eating')
print('======>')
类体的代码在类定义阶段就会执行,理所应当会产生类的名称空间,用__dict__属性查看
 print(OldboyStudent.__dict__)
print(OldboyStudent.__dict__['school'])
print(OldboyStudent.__dict__['learn'])

定义完了,调用的方法为:

print(OldboyStudent.school)
print(OldboyStudent.learn)

调用类里边的函数属性时,如果要加上结果,需要在调用的时候在括号内加值。

# OldboyStudent.learn(123)

修改类的属性# 
OldboyStudent.x=1111111111111111111111 # OldboyStudent.school='Oldboy'
# del  OldboyStudent.school
# print(OldboyStudent.__dict__) 另外一种方法,但是不推荐这么做:
# OldboyStudent.__dict__['x']=1111111111111111111111

产生程序中的对象:

类名加括号,产生一个该类的实际存在的对象,该调用过程称为实例化。

可以再init中加上类型检查。

eg:

 class OldboyStudent:
school = 'oldboy' #类的数据属性
#obj1,'李大炮',18,'女'
def __init__(self,name,age,sex): #(类的函数属性)在实例化时,产生对象之后执行
# if not isinstance(name,str):
# raise TypeError('名字必须是字符串类型')
self.name=name
self.age=age
self.sex=sex
# return None #__init__方法必须返回None
#obj1.name='李大炮'
#obj1.age=18
#obj1.sex='女' def learn(self):
print('is learning') def eat(self):
print('is eating')
对象可以访问类的数据属性,结论:类的数据属性共享给所有对象使用,id对一样
print(obj1.school,id(obj1.school))
print(obj2.school,id(obj2.school))
print(obj3.school,id(obj3.school))
print(OldboyStudent.school,id(OldboyStudent.school))
类的函数属性是绑定给所有对象使用的,绑定给不同的对象是不同的绑定方法,绑定方法有何特殊之处? 暂且抛开绑定方法,类肯定可以访问自己的函数属性
OldboyStudent.learn(obj1)
OldboyStudent.learn(obj2)
OldboyStudent.learn(obj3)
绑定方法:绑定给谁,就由谁来调用,谁来调用就把“谁”本身当做第一个参数传入
obj1.learn() #OldboyStudent.learn(obj1)
obj2.learn() #OldboyStudent.learn(obj1)
obj3.learn() #OldboyStudent.learn(obj1)
属性查找顺序:先从对象的__dict__中找,然后到类的__dict__中找,然后父类.... OldboyStudent.school='哈佛'
OldboyStudent.school='哈佛'
obj1.school='hahahahahahahhahahahahahah'
print(obj1.__dict__)
print(obj1.school) print(obj2.school)
print(obj3.school)

Day7 面向对象和类的介绍的更多相关文章

  1. Python之路,Day7 - 面向对象编程进阶

    本节内容: 面向对象高级语法部分 经典类vs新式类 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 作业:开发一个支持多用户在线的FTP程序 经典类vs新式类 把下面代 ...

  2. Python之面向对象与类

    本节内容 面向对象的概念 类的封装 类的继承 类的多态 静态方法.类方法 和 属性方法 类的特殊成员方法 子类属性查找顺序 一.面向对象的概念 1. "面向对象(OOP)"是什么? ...

  3. 【转】Python之面向对象与类

    [转]Python之面向对象与类 本节内容 面向对象的概念 类的封装 类的继承 类的多态 静态方法.类方法 和 属性方法 类的特殊成员方法 继承层级关系中子类的实例对象对属性的查找顺序问题 一.面向对 ...

  4. day7 面向对象class()学习

        面向过程 VS 面向对象     编程范式 编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程,一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓 ...

  5. Python编程-面向对象和类

    一.面向对象的程序设计 1.面向过程 VS 面向对象 (1)编程范式 编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程,一个程序是程序员为了得到一个任务结果而编写的一组 ...

  6. php面向对象:类的继承实例讲解

    什么是类的继承?说白了,我觉得就是提高代码使用效率的.下面我就给大家介绍下继承.大理石平台维修 类的继承概念 子类继承父类的所有成员变量个方法,包括构造方法,当子类被实例化时,php会现在子类中查询构 ...

  7. 085 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 04 构造方法调用

    085 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 04 构造方法调用 本文知识点:构造方法调用 说明:因为时间紧张,本人写博客过程中只是 ...

  8. 082 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 01 构造方法-无参构造方法

    082 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 01 构造方法-无参构造方法 本文知识点:构造方法-无参构造方法 说明:因为时间紧张, ...

  9. Python如何设计面向对象的类(上)

    Python是一门高级语言,支持面向对象设计,如何设计一个符合Python风格的面向对象的类,是一个比较复杂的问题,本文提供一个参考,表达一种思路,探究一层原理. 目标 期望实现的类具有以下基本行为: ...

随机推荐

  1. Java中引用传递

    //Java中的引用传递 class Ref1{ int temp = 10 ; String Str = "hello"; } public class HelloWorld { ...

  2. 为什么不要重载 && 和 || 操作符!!!

    理论知识: 1)&&和 || 是C++中非常特殊的操作符 2)&&和 || 内置实现了短路规则 简单说明一下短路规则. demo1 #include <iostr ...

  3. UNIX环境高级编程——管道和FIFO限制

    系统加于管道和FIFO的唯一限制为: OPEN_MAX     一个进程在任意时刻打开的最大描述符数: PIPE_BUF       可原子的写往一个管道或FIFO的最大数据量. OPEN_MAX的值 ...

  4. Chapter 2 User Authentication, Authorization, and Security(9):防止登录名和用户查看元数据

    原文出处:http://blog.csdn.net/dba_huangzj/article/details/39003679,专题目录:http://blog.csdn.net/dba_huangzj ...

  5. curl命令备注

    curl是利用URL语法在命令行方式下工作的开源文件传输工具.它被广泛应用在Unix.多种Linux发行版中,并且有DOS和Win32.Win64下的移植版本.1.get请求:curl "h ...

  6. 9.5、Libgdx加速度计

    (官网:www.libgdx.cn) 加速度计可以让设备通过三个坐标轴检测加速度.通过加速度可以检测设备的方向. 加速度的单位是米每秒的平方.如果一个坐标轴指向地心,加速度大概是-10米每秒的平方.如 ...

  7. 无法与域Active Directory域控制器(AD DC)连接(虚机加域出错问题)

    今天建了两台虚机用的VMWARE,一台做域控,一台做应用服务器,但是部署好域控要把应用服务器加入域时候报错 虚机网卡设置桥接并设置好IP使两台虚机在同一个局域网内,通过ip地址互ping能ping通, ...

  8. Java之美[从菜鸟到高手演变]之设计模式二

    在阅读过程中有任何问题,请及时联系:egg. 邮箱:xtfggef@gmail.com 微博:http://weibo.com/xtfggef 如有转载,请说明出处:http://blog.csdn. ...

  9. 数据结构基础(3) --Permutation & 插入排序

    Permutation(排列组合) 排列问题: 设R = {r1, r2, ... , rn}是要进行排列的n个元素, Ri = R-{ri}; 集合X中元素的全排列记为Permutation(X), ...

  10. java缓存系统

    第一版 package cache; import java.util.HashMap; import java.util.Map; public class Cache1 { private Map ...