python之路——面向对象(基础篇)
面向对象编程:类,对象
面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用。
面向对象技术简介
- 类(class):用来描述有相同属性和方法的对象的集合,它定义了集合中每个对象所共有的属性和方法。
- 对象(object):类的实例
创建类和对象
class Person:
def __init__(self,name,age):
self.name = name
self.age = age
def talk(self,msg):
print("%s-talk:%s"%(self.name,self.msg))
obj = Person("alex","23")
- class 是关键字表示类,后边紧跟着类名"Person"
- 创建对象obj = Person()->类名加括号(有参数,要传递构造方法的参数进去)
- self是个什么东西呢?
self:python自动传递的参数,代表你实例的对象。通过self可以调用该对象的相应属性和方法。
- 构造方法:"__init__(self,name,age)";只要创建对象,就会自动去执行该方法然后我就可以用对象直接访问:obj.name &obj.age
p_obj1 = Person("alex","")
p_obj2 = Person("lcy","")
print(p_obj1.name,p_obj1.age)# alex 23
print(p_obj2.name,p_obj2.age)# lcy 24
面向对象三大特性:封装、继承、多态
封装
- 将内容封装到类中
- 在从类中调用封装的方法或属性
Ex:
class Person:
def __init__(self,name,sex,age):
self.name = name
self.sex = sex
self.age = age
def show(self,obj):
print(self.name,obj.name)
obj_1 = Person("sb","male",23)
obj_2 = Person("json","female",24)
obj_1.show(obj_2)
'''
打印:sb;json
'''
封装
注:在类中可以封装任意类型的数据

继承
面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。继承完全可以理解成类之间的类型和子类型关系。
需要注意的地方:继承语法 class 派生类名(基类名)://... 基类名写作括号里,基本类是在类定义的时候,在元组之中指明的。
- 单继承
- 多继承
- 单继承
class A:
def show(self):
print("A:show")
def aa(self):
print("A:aa")
class B(A):
def show(self):
print("B:show")
def bb(self):
print("B:bb")
class C(B):
def show(self):
print("C:show")
def cc(self):
print("C:cc")
obj_c = C()
obj_c.show() #优先调用自己的方法,如果自己没有,在去父类中找
obj_c.bb()

再看一个例子:
class A:
def __init__(self,name):
self.name = name
def show(self):
print(self.name)
class B(A):
def __init__(self,name):
self.name = name
obj_a = A("alex")
obj_b = B("lcy")
obj_b.show() # show 会打印谁 是 lcy 还是 alex
想一想我们之前说过的self,这里是子类B对象obj_b调用父类A的show方法,那么self传递的肯定是obj_b 这个对象。所以打印的是obj_b.name = lcy;
2. 多继承
举一个简单多继承(python3)
class C0:
def f2(self0):
print("C0-f2") class C1(C0):
def f1(self):
print("C1-f1") class C2: def f2(self):
print("C2-f2")
class C3(C1,C2):
def f3(self):
print("C3-f2") obj = C3()
obj.f2()
我们看obj 调用f2应该是谁的方法呢?
按着继承顺序,寻找路径应该是C3->C1->C0->C2 (这个其中C2并不继承任何类)见图1
注意:如果C2继承C0,那么寻找路径就编程了C3->C1->C2->C0 见图2
图1
图二
在举一个看程序源码时候对象调用方法的一个执行顺序
class C5:
def forever(self):
self.run() def run(self):
print("C5-run")
class C4(C5):
def __init__(self):
print("C4-init") def process(self):
pass def run(self):
print("C4-run")
self.process() class C3(C4):
def __init__(self):
print("C3-init") class C2:
def process(self):
print("C2-process") class C1(C2,C3):
pass obj = C1()
obj.forever()
'''
C3-init
C4-run
C2-process
'''
顺序图:首先C1()调用构造,寻找init方法路径 C1->C2->C3(找到了)->C4->C5
调用forever方法,寻找路径C1->C2->C3->C4->C5(找到了)
forever又执行了 self.run方法 继续寻找:C1->C2->C3->C4(找到了)->C5
run方法又执行了self.process()方法 继续寻找:C1->C2(找到了返回结果)->C3->C4->C5

3. 多态
python不支持多态。
总结
- 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用
- 类 是一个模板,模板中包装了多个“函数”供使用
- 对象,根据模板创建的实例(即:对象),实例用于调用被包装在类中的函数
- 面向对象三大特性:封装、继承和多态
最重要的图示:类和对象是在内存中如何保存

python之路——面向对象(基础篇)的更多相关文章
- python之路 面向对象基础 XML
一.面向对象基础 1.类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 类变量:类变量在整个实例化的对象中是公用的.类变量定义 ...
- python之路 面向对象进阶篇
一.字段 字段包括:普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同, 普通字段属于对象 静态字段属于类 class Province: # 静态字段 countr ...
- python之路: 基础篇
)或>>> name = ) #按照占位符的顺序):] #下标识从0开始的 wulaoer >>> print name[:] # ...
- Python(三)基础篇之「模块&面向对象编程」
[笔记]Python(三)基础篇之「模块&面向对象编程」 2016-12-07 ZOE 编程之魅 Python Notes: ★ 如果你是第一次阅读,推荐先浏览:[重要公告]文章更新. ...
- Python之路【第九篇】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
Python之路[第九篇]:Python操作 RabbitMQ.Redis.Memcache.SQLAlchemy Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用 ...
- 8.python笔记之面向对象基础
title: 8.Python笔记之面向对象基础 date: 2016-02-21 15:10:35 tags: Python categories: Python --- 面向对象思维导图 (来自1 ...
- 智普教育Python视频教程之入门基础篇,python笔记
智普教育Python视频教程之入门基础篇,python笔记 print id()内存地址 type()变量类型 windows命令行下edit命令 python数据类型不需要指定类型 定义hostna ...
- Python(四)基础篇之「文件对象&错误处理」
[笔记]Python(四)基础篇之「文件对象&错误处理」 2016-12-08 ZOE 编程之魅 Python Notes: ★ 如果你是第一次阅读,推荐先浏览:[重要公告]文章更新. ...
- Python学习笔记之基础篇(-)python介绍与安装
Python学习笔记之基础篇(-)初识python Python的理念:崇尚优美.清晰.简单,是一个优秀并广泛使用的语言. python的历史: 1989年,为了打发圣诞节假期,作者Guido开始写P ...
- Python之路【第一篇】python基础
一.python开发 1.开发: 1)高级语言:python .Java .PHP. C# Go ruby c++ ===>字节码 2)低级语言:c .汇编 2.语言之间的对比: 1)py ...
随机推荐
- XE7 & IOS开发之开发账号(1):开发证书、AppID、设备、开发授权profile的申请使用,附Debug真机调试演示(XCode所有版本通用,有图有真相)
网上能找到的关于Delphi XE系列的移动开发的相关文章甚少,本文尽量以详细的图文内容.傻瓜式的表达来告诉你想要的答案. 原创作品,请尊重作者劳动成果,转载请注明出处!!! 注意,以下讨论都是以&q ...
- OpenLayers 3 中Layers的相关知识
昨天自己一遍又一遍的把API里Accessible map那个例子写下来,终于好像有熟悉一点点.找到一篇博文详细讲Layers的.整理一下贴出来(本来想在网上做笔记可以重新排版,比写在本子上要容易有结 ...
- [LeetCode OJ] Max Points on a Line
Max Points on a Line Submission Details 27 / 27 test cases passed. Status: Accepted Runtime: 472 ms ...
- 给iOS开发新手送点福利,简述文本属性Attributes的用法
给iOS开发新手送点福利,简述文本属性Attributes的用法 文本属性Attributes 1.NSKernAttributeName: @10 调整字句 kerning 字句调整 2.NSF ...
- Python-2 print
#1 print函数(python版本3.3.5): >>> help(print)Help on built-in function print in module builtin ...
- 微信小程序--摸索之旅
首先 奉上腾讯官方文档 方便参考:https://mp.weixin.qq.com/debug/wxadoc/design/index.html 个人认为没说啥特别有用的信息(可能是我看的太粗糙了) ...
- 使用Asp.net WebAPI 快速构建后台数据接口
现在的互联网应用,无论是web应用,还是移动APP,基本都需要实现非常多的数据访问接口.其实对一些轻应用来说Asp.net WebAPI是一个很快捷简单并且易于维护的后台数据接口框架.下面我们来快速构 ...
- react在jsx语法中实现for循环
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script sr ...
- sed命令
sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法sed命令行格式为: sed ...
- php工作笔记5-css定位
1. CSS 定位机制 CSS 有三种基本的定位机制:普通流.浮动和绝对定位. 除非专门指定,否则所有框都在普通流中定位.也就是说,普通流中的元素的位置由元素在 (X)HTML 中的位置决定. 块级框 ...