面向对象讲解:

‘’‘

面向过程:

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

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

缺点:可扩展性差

应用场景:脚本程序,比如说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. StringBuffer与StringBuilder详解

    刚刚在参加网易实习生在线考试的时候,出了一道选择题谈到了StringBuilder这个类的一些选项,虽然那道题自己做对了,但是也提醒了我应该好好了解一些StringBuffer与StringBuild ...

  2. 精通CSS+DIV网页样式与布局--CSS文字效果

    上篇文章,小编简单的介绍了一下CSS的一些基本语法,学习内容不是很复杂,都是CSS的一些入门知识,但是万丈高楼平地起,搭好地基,高楼大厦不在话下,学习任何课程,都必须从基础开始,一步一个脚印,踏实坚定 ...

  3. Android性能优化之常见的内存泄漏

    前言 对于内存泄漏,我想大家在开发中肯定都遇到过,只不过内存泄漏对我们来说并不是可见的,因为它是在堆中活动,而要想检测程序中是否有内存泄漏的产生,通常我们可以借助LeakCanary.MAT等工具来检 ...

  4. Demand Side Platform

    DSP特点: DSP不是从网络媒体那里包买广告位,也不是采用CPD(Cost Per Day)的方式获得广告位:而是从广告交易平台(AdExchange)来通过实时竞价的方式获得对广告进行曝光的机会, ...

  5. 如何获得mysql数据库的所有的列

    命令行下直接用:descrbe 表名 hive也是一样的. 用查询: SELECT  COLUMN_NAME FROM  `information_schema`.`COLUMNS` where  ` ...

  6. 从Linux启动过程到android启动过程

    Linux启动过程: 1.首先开机给系统供电,此时硬件电路会产生一个确定的复位时序,保证cpu是最后一个被复位的器件.为什么cpu要最后被复位呢?因为 如果cpu第一个被复位,则当cpu复位后开始运行 ...

  7. Leetcode_125_Valid Palindrome

    本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/41488377 Valid Palindrome Given ...

  8. Leetcode_165_Compare Version Numbers

    本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/42342251 Compare two version nu ...

  9. 恭喜发财! -- 手把手教你仿造一个qq下拉抢红包 Android自定义view

    猴年猴赛雷啊各位,今天没吃药我感觉自己萌萌哒! qq和微信和支付宝红包大战,不知道各位的战绩是多少嘞? 反正我qq抢到的都是气泡.因为太不爽,所以自己写一个下拉抢红包自己玩(自己跟自己玩). 先来看效 ...

  10. 【一天一道LeetCode】#15 3Sum

    一天一道LeetCode系列 (一)题目 Given an array S of n integers, are there elements a, b, c in S such that a + b ...