简说Python之面向对象
之前介绍了函数。对象代表了什么。可以称为“一篮子”计划,把数据属性和方法集合在一起,汇总成一个对象(object)。在C++中,这个称为类的概念。
Python对象
对象可以比喻为一个物种,例如:狗,它有颜色,名字,年龄,种类等特性,它的行为动作,会吼,会跳,会睡觉等等。而对象=action+attribute。
举例:我们设置一个对象的属性和动作。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class dog:
def jump(self):
print("名字叫",self.name,"的小狗跳起来了")
def introduce(self):
print("这只小狗叫做",self.name,",它是一只",self.color,"的小狗,","它今年",self.age)
mydog = dog() #类实例化
mydog.name ="小黄" #设置name属性
mydog.color = "棕色" #设置color属性
mydog.age = "8岁" #设置age属性
mydog.jump()
mydog.introduce()
另存为object01.py,执行结果如下:
G:\Py>python object01.py
名字叫 小黄 的小狗跳起来了
这只小狗叫做 小黄 ,它是一只 棕色 的小狗, 它今年 8岁
上述结果,可以看出对象的一些属性,不用前期定义,可以在实例化之后。再设置属性。不用先前定义好,有别于其他语言。
对象的内置方法
__init__方法
除了想之前那样,后面定义对象的属性。可以使用__init__方法,在创建一个类的实例的时候,通过传参的方式。用来初始化你要设置对象的属性值。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class dog:
def __init__(self, name, color, age):
self.name = name
self.color = color
self.age = age
def jump(self):
print("名字叫",self.name,"的小狗跳起来了")
def introduce(self):
print("这只初始化小狗叫做",self.name,",它是一只",self.color,"的小狗,","它今年",self.age)
mydog = dog("小黄","棕色","8岁")
mydog.jump()
mydog.introduce()
另存为object02.py,执行结果如下:
G:\Py>python object02.py
名字叫 小黄 的小狗跳起来了
这只初始化小狗叫做 小黄 ,它是一只 棕色 的小狗, 它今年 8岁
__str__方法
如果不使用__str__方法,直接执行实例化,等到的效果如下:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class dog:
def __init__(self, name, color, age):
self.name = name
self.color = color
self.age = age
def jump(self):
print("名字叫",self.name,"的小狗跳起来了")
def introduce(self):
print("这只初始化小狗叫做",self.name,",它是一只",self.color,"的小狗,","它今年",self.age)
mydog = dog("小黄","棕色","8岁")
print (mydog)
执行的效果如下:
G:\Py>python object03.py
<__main__.dog object at 0x000000000257CFC8>
上面说明:实例在main主程序中,定义了一个dog对象,内存位置为:0x000000000257CFC8
如果想显示其他内容,可以使用特殊方法__str__,如下:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class dog:
def __init__(self, name, color, age):
self.name = name
self.color = color
self.age = age
def __str__(self):
msg = "this object called:" +self.name
return msg
mydog = dog("小黄","棕色","8岁")
print (mydog)
另存为:object04.py,得出如下的结果:
G:\Py>python object04.py
this object called:小黄
对象的多态
多态(polymorphism),表示在不同的类里,有同名的方法。
举例如下:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class Triangle:
def __init__(self, width, height):
self.width = width
self.height = height
def getArea(self):
area = self.width * self.height / 2.0
return area
class Square:
def __init__(self, size):
self.size = size
def getArea(self):
area = self.size * self.size
return area
myTriangle = Triangle(4,5)
TriangleArea = myTriangle.getArea()
print("三角形的面积为:",TriangleArea)
mySquare = Square(4)
SquareArea = mySquare.getArea()
print("正方形的面积为:",SquareArea)
另存为object05.py,结果如下:
G:\Py>python object05.py
三角形的面积为: 10.0
正方形的面积为: 16
对象的封装
由于抽象的原则,调用对象的时候,无需知道里面的细节。直接调用其对象的方法。等到想要的结果。如下:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class dog:
def setName(self,name):
self.name = name
def getName(self):
print("小狗的名字叫做:",self.name)
mydog = dog()
mydog.setName("小黑")
mydog.getName()
另存为:object06.py,执行结果如下:
G:\Py>python object06.py
小狗的名字叫做: 小黑
对象的继承
代码的重用,派生了继承的思路。通过继承创建的类为:子类或者派生类。被继承的类称为:基类,父类或超类。
语法:
class 派生类名(基类名)
...
举例如下:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class dog:
def __init__(self, name, color, age):
self.name = name
self.color = color
self.age = age
def jump(self):
print("名字叫",self.name,"的小狗跳起来了")
def introduce(self):
print("这只初始化小狗叫做",self.name,",它是一只",self.color,"的小狗,","它今年",self.age)
class Zdog(dog):
def sleep(self):
print("名字叫",self.name,"的小狗睡着了")
mydog = Zdog("小黄","棕色","8岁") #调用父类的初始化方法
mydog.introduce() #调用父类的introduce
mydog.sleep() #调用子类的方法
另存为:object07.py,执行效果如下:
G:\Py>python object07.py
这只初始化小狗叫做 小黄 ,它是一只 棕色 的小狗, 它今年 8岁
名字叫 小黄 的小狗睡着了
简说Python之面向对象的更多相关文章
- 简学Python第六章__class面向对象编程与异常处理
Python第六章__class面向对象编程与异常处理 欢迎加入Linux_Python学习群 群号:478616847 目录: 面向对象的程序设计 类和对象 封装 继承与派生 多态与多态性 特性p ...
- PYTHON开发--面向对象基础入门
面向对象 一:面向对象初级 1.思考:首先在python中,以前我们以前用到的几乎都是函数式编程,但是有时候函数式编程其中代码重复利用率太高,我们往往会把这些重复代码写进一个函数日后去调用,所以呢,今 ...
- Python之面向对象与类
本节内容 面向对象的概念 类的封装 类的继承 类的多态 静态方法.类方法 和 属性方法 类的特殊成员方法 子类属性查找顺序 一.面向对象的概念 1. "面向对象(OOP)"是什么? ...
- 【转】Python之面向对象与类
[转]Python之面向对象与类 本节内容 面向对象的概念 类的封装 类的继承 类的多态 静态方法.类方法 和 属性方法 类的特殊成员方法 继承层级关系中子类的实例对象对属性的查找顺序问题 一.面向对 ...
- Python之面向对象封装
Python之面向对象封装 封装不是单纯意义的隐藏 什么是封装: 将数据放在一个设定好的盒子里,并标出数据可以实现的功能,将功能按钮外露,而隐藏其功能的工作原理,就是封装. 要怎么封装: 你余额宝有多 ...
- python初始面向对象
阅读目录 楔子 面向过程vs面向对象 初识面向对象 类的相关知识 对象的相关知识 对象之间的交互 类命名空间与对象.实例的命名空间 类的组合用法 初识面向对象小结 面向对象的三大特性 继承 多态 封装 ...
- 简说Python发展及其就业前景
简说python 发展历史 Python是著名的"龟叔"Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言. python从ABC语言 ...
- Python 【面向对象】
前言 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触过面向对象的编程语言 ...
- python基础——面向对象编程
python基础——面向对象编程 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...
- Python的面向对象3
接下来,我们接着讲Python的面向对象,在上一次的博客中,我们详细介绍了类与对象的属性,今天,我们来详细介绍一下面向对象中的方法! 1.定义实例方法 一个实例的私有属性就是以__开头的属性,无法被外 ...
随机推荐
- 数字集成电路设计之CMOS
数字集成电路设计理论 1.基本的理论结构 现在主流的集成电路器件还是CMOS,所以理论的结构还是基于CMOS.CMOS有N和P两种MOS组合组合在一起.CMOS最简单的器件就是反相器.然后是标准的逻辑 ...
- KingbaseES V8R3 集群运维案例 --操作系统‘soft lockup’引起的failover切换
案例说明: 在国产中标麒麟系统生产环境中,监控发现KingbaseES V8R3集群发生了failover的主备切换,客户需要给出分析报告,说明此次集群发生failover切换的原因,本次文档通过分析 ...
- 浅谈ET框架--ECS设计核心(一)
ET框架的ECS设计核心可以总结为一句话,那就是: 继承转组件,多态转分发 OOP设计里的继承更换为组件Component模式,多态转成分发模式. 框架代码里头的案例: 数值组件挂载Entity上. ...
- Log4Net使用示例
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSe ...
- #树上启发式合并,位运算#CF570D Tree Requests
题目 给定一个以 \(1\) 为根的 \(n\) 个结点的树,每个点上有一个字母\((a-z)\),每个点的深度定义为该节点到 \(1\) 号结点路径上的点数. 每次询问 \(a, b\) 查询以 \ ...
- #后缀数组#洛谷 4051 [JSOI2007]字符加密
题目 分析 将字符串复制一份放入末尾,将其后缀排序之后 SA数组既然表示排名为\(i\)的后缀的起始位置, 那么只要它在\([1,len]\)范围内就是合法的, 那么输出以这个位置开头长度为\(len ...
- #树状数组,并查集#CF920F SUM and REPLACE
题目 分析 由于\(a_i=1或2\)时\(d(a_i)=a_i\),且其余情况修改后答案只会越来越小, 考虑用树状数组维护区间和,用并查集跳过\(a_i=1或2\)的情况 代码 #include & ...
- SQL FOREIGN KEY 约束- 保障表之间关系完整性的关键规则
SQL FOREIGN KEY 约束 SQL FOREIGN KEY 约束用于防止破坏表之间关系的操作.FOREIGN KEY 是一张表中的字段(或字段集合),它引用另一张表中的主键.具有外键的表称为 ...
- 面试必备HashMap源码解析
Map的实现有很多种,而HashMap算是最经典的实现之一了吧,在平时的使用中,绝大部分的使用也都是HashMap,我记得刚入行那会,脑子里对Map的使用就是Map map = new HashMap ...
- Sqlite数据库联合查询及表复制等详述
外键:一般在两个表之间要建立关联时候,创建一个列创建 为外键(UserInfos-DeptId),它在另一个表必须是主键(DeptInfos-DeptId) 元素约束:主键约束:主要区别内容相同的行, ...