Day7 面向对象和类的介绍
面向对象讲解:
‘’‘
面向过程:
核心是过程二字,过程指的是问题的解决步骤,基于过程去设计程序,就好比在设计一条流水线,是一种机械式的思维方式。
优点:复杂的问题流程化,进而简单化
缺点:可扩展性差
应用场景:脚本程序,比如说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 面向对象和类的介绍的更多相关文章
- Python之路,Day7 - 面向对象编程进阶
本节内容: 面向对象高级语法部分 经典类vs新式类 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 作业:开发一个支持多用户在线的FTP程序 经典类vs新式类 把下面代 ...
- Python之面向对象与类
本节内容 面向对象的概念 类的封装 类的继承 类的多态 静态方法.类方法 和 属性方法 类的特殊成员方法 子类属性查找顺序 一.面向对象的概念 1. "面向对象(OOP)"是什么? ...
- 【转】Python之面向对象与类
[转]Python之面向对象与类 本节内容 面向对象的概念 类的封装 类的继承 类的多态 静态方法.类方法 和 属性方法 类的特殊成员方法 继承层级关系中子类的实例对象对属性的查找顺序问题 一.面向对 ...
- day7 面向对象class()学习
面向过程 VS 面向对象 编程范式 编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程,一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓 ...
- Python编程-面向对象和类
一.面向对象的程序设计 1.面向过程 VS 面向对象 (1)编程范式 编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程,一个程序是程序员为了得到一个任务结果而编写的一组 ...
- php面向对象:类的继承实例讲解
什么是类的继承?说白了,我觉得就是提高代码使用效率的.下面我就给大家介绍下继承.大理石平台维修 类的继承概念 子类继承父类的所有成员变量个方法,包括构造方法,当子类被实例化时,php会现在子类中查询构 ...
- 085 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 04 构造方法调用
085 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 04 构造方法调用 本文知识点:构造方法调用 说明:因为时间紧张,本人写博客过程中只是 ...
- 082 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 01 构造方法-无参构造方法
082 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 01 构造方法-无参构造方法 本文知识点:构造方法-无参构造方法 说明:因为时间紧张, ...
- Python如何设计面向对象的类(上)
Python是一门高级语言,支持面向对象设计,如何设计一个符合Python风格的面向对象的类,是一个比较复杂的问题,本文提供一个参考,表达一种思路,探究一层原理. 目标 期望实现的类具有以下基本行为: ...
随机推荐
- Java中引用传递
//Java中的引用传递 class Ref1{ int temp = 10 ; String Str = "hello"; } public class HelloWorld { ...
- 为什么不要重载 && 和 || 操作符!!!
理论知识: 1)&&和 || 是C++中非常特殊的操作符 2)&&和 || 内置实现了短路规则 简单说明一下短路规则. demo1 #include <iostr ...
- UNIX环境高级编程——管道和FIFO限制
系统加于管道和FIFO的唯一限制为: OPEN_MAX 一个进程在任意时刻打开的最大描述符数: PIPE_BUF 可原子的写往一个管道或FIFO的最大数据量. OPEN_MAX的值 ...
- Chapter 2 User Authentication, Authorization, and Security(9):防止登录名和用户查看元数据
原文出处:http://blog.csdn.net/dba_huangzj/article/details/39003679,专题目录:http://blog.csdn.net/dba_huangzj ...
- curl命令备注
curl是利用URL语法在命令行方式下工作的开源文件传输工具.它被广泛应用在Unix.多种Linux发行版中,并且有DOS和Win32.Win64下的移植版本.1.get请求:curl "h ...
- 9.5、Libgdx加速度计
(官网:www.libgdx.cn) 加速度计可以让设备通过三个坐标轴检测加速度.通过加速度可以检测设备的方向. 加速度的单位是米每秒的平方.如果一个坐标轴指向地心,加速度大概是-10米每秒的平方.如 ...
- 无法与域Active Directory域控制器(AD DC)连接(虚机加域出错问题)
今天建了两台虚机用的VMWARE,一台做域控,一台做应用服务器,但是部署好域控要把应用服务器加入域时候报错 虚机网卡设置桥接并设置好IP使两台虚机在同一个局域网内,通过ip地址互ping能ping通, ...
- Java之美[从菜鸟到高手演变]之设计模式二
在阅读过程中有任何问题,请及时联系:egg. 邮箱:xtfggef@gmail.com 微博:http://weibo.com/xtfggef 如有转载,请说明出处:http://blog.csdn. ...
- 数据结构基础(3) --Permutation & 插入排序
Permutation(排列组合) 排列问题: 设R = {r1, r2, ... , rn}是要进行排列的n个元素, Ri = R-{ri}; 集合X中元素的全排列记为Permutation(X), ...
- java缓存系统
第一版 package cache; import java.util.HashMap; import java.util.Map; public class Cache1 { private Map ...